Chargement des données de texte dans l'Octave avec un format spécifique
J'ai un ensemble de données que je voudrais stocker et être en mesure de charger dans l'Octave
18.0 8 307.0 130.0 3504. 12.0 70 1 "chevrolet chevelle malibu"
15.0 8 350.0 165.0 3693. 11.5 70 1 "buick skylark 320"
18.0 8 318.0 150.0 3436. 11.0 70 1 "plymouth satellite"
16.0 8 304.0 150.0 3433. 12.0 70 1 "amc rebel sst"
17.0 8 302.0 140.0 3449. 10.5 70 1 "ford torino"
15.0 8 429.0 198.0 4341. 10.0 70 1 "ford galaxie 500"
14.0 8 454.0 220.0 4354. 9.0 70 1 "chevrolet impala"
14.0 8 440.0 215.0 4312. 8.5 70 1 "plymouth fury iii"
14.0 8 455.0 225.0 4425. 10.0 70 1 "pontiac catalina"
15.0 8 390.0 190.0 3850. 8.5 70 1 "amc ambassador dpl"
Il ne fonctionne pas immédiatement lorsque j'essaie d'utiliser:
data = load('auto.txt')
Est-il un moyen de les charger à partir d'un texte fichiers avec le format donné ou dois-je besoin de le convertir à l'e.g
18.0,8,307.0,130.0,3504.0,12.0,70,1
...
EDIT:
La suppression de la dernière ligne et la fixation de la 'moitié' nombre par exemple 3504. -> 3504.0
et alors utilisés:
data = load('-ascii','autocleaned.txt');
Chargé les données que l'on veut dans une matrice en Octave.
Puisque toutes les données sont en fixe la largeur des colonnes (à l'exception de la dernière des chaînes de caractères), vous devez être capable de lire ligne par ligne, à l'aide de
J'ai compris comment le charger dans
Intéressant d'apprendre plus faible niveau de façons de le faire. Pour le moment, le nettoyage du fichier d'entrée et à l'aide de la charge était assez pour moi. Mais il y a juste le cas où vous voulez un peu plus de contrôle. Ici plus spécialisés moyens pourrait venir dans maniable.
Creuser plus loin dans l'Octave docs, je vois qu'il n'ont
fscanf
pour décoder la ligne. En effet, vous serait le lire avec le même dossier spécificateur que vous pouvez utiliser pour écrire (en C ou en Fortran), ou avec fprintf
.J'ai compris comment le charger dans
Python
à l'aide de son csv
et numpy
modules, et ensuite le transférer sur Octave
via un .mat
fichier. Le résultat a été une 1x10 struct array
avec 9 champs - 8 numérique et 1 chaîne. Je pourrais poster une réponse si vous le souhaitez.Intéressant d'apprendre plus faible niveau de façons de le faire. Pour le moment, le nettoyage du fichier d'entrée et à l'aide de la charge était assez pour moi. Mais il y a juste le cas où vous voulez un peu plus de contrôle. Ici plus spécialisés moyens pourrait venir dans maniable.
Creuser plus loin dans l'Octave docs, je vois qu'il n'ont
dlmread
, csvread
, fileread
, textread
, textscan
. Tous, sauf dlmread
sont interprétés et peut être lu avec type
.OriginalL'auteur user317706 | 2014-08-05
Vous devez vous connecter pour publier un commentaire.
load
l'entend généralement pour le chargement d'octave et matlab fichiers binaires, mais peut être utilisé pour le chargement des données textuelles comme la vôtre. Vous pouvez charger vos données à l'aide de la"-ascii"
option, mais vous devez reformater votre dossier légèrement avant de la mettre enload
même avec le"-ascii"
option est activée. L'utilisation constante d'un séparateur de colonne ie. juste un onglet ou une virgule, utilisez les numéros pleins pas3850.
et ne pas utiliser de chaînes.Ensuite, vous pouvez faire quelque chose comme cela pour le faire fonctionner
OriginalL'auteur ShaneQful
Si le final de la chaîne de champ est supprimé à partir de chaque ligne, le fichier peut être lu avec:
Sinon l'ensemble du dossier a pu lire dans la colonne et remodelé.
Je n'ai pas compris comment faire pour lire à la fois les champs numériques et le champ de chaîne. Pour cela, j'ai dû tomber en arrière sur Python avec plus fins générales de la lecture du fichier d'outils.
Ici est un script Python qui lit le fichier, crée un
numpy
structuré tableau, écrit que, pour un.mat
fichier, quiOctave
peut alors lire:Dans
Octave
cela pourrait lire avecPlus récent Octave (3.8) a une
importdata
fonction. Il gère les données d'origine des fichiers sans argument supplémentaire. Il retourne une structure avec 2 champsx.data
est un(10,11)
de la matrice.x.data(:,1:8)
est le désir de données numériques.x.data(:,9:11)
est un mélange deNA
et de nombres aléatoires. LeNA
stand pour les mots à la fin des lignes.x.textdata
est un(24,1)
cellule avec ces mots. La chaîne de caractères entre guillemets s pourrait être remonté à partir de ces mots, à l'aide de laNA
et des devis afin de déterminer le nombre de mots qui appartiennent à la ligne.De lire les données numériques qu'il utilise
dlmread
. Depuis le reste deimportdata
est écrit dansOctave
, il pourrait être utilisé comme point de départ pour une fonction personnalisée qui gère les données de chaîne correctement.OriginalL'auteur hpaulj
https://octave.org/doc/v4.0.0/Simple-File-I_002fO.html
Essayer cela,
OriginalL'auteur Engineering Locha