Domanda

Considera il seguente file

var1 var2 variable3
1     2    3
11    22   33

Vorrei caricare i numeri in una matrice e i titoli delle colonne in una variabile che sarebbe equivalente a:

variable_names = char('var1', 'var2', 'variable3');

Non mi dispiace dividere i nomi e i numeri in due file, tuttavia preparare i file di codice matlab e valutarli non è un'opzione.

Nota che può esserci un numero arbitrario di variabili (colonne)

È stato utile?

Soluzione

Suggerisco importdata per operazioni come questa:

d = importdata('filename.txt');

Il ritorno è una struttura con i campi numerici in un membro chiamato 'dati' e le intestazioni di colonna in un campo chiamato 'colheaders'.

Un'altra utile interfaccia per l'importazione di dati manipolatori come questi è la classe 'dataset' disponibile nella Statistics Toolbox.

Altri suggerimenti

Se l'intestazione è nella prima riga, allora

A = dlmread(filename,delimString,2,1);

leggerà i dati numerici in Matrix A.

È quindi possibile utilizzare

fid = fopen(filename)
headerString = fscanf(fid,'%s/n') % reads header data into a string
fclose(fid)

È quindi possibile utilizzare strtok per dividere headerString in un array di celle. È un approccio che mi viene in mente di affrontare un numero sconosciuto di colonne

modificare

chiamata a funzione fscanf fissa

Usa solo textcan con specificatori di formato diversi.

fid = fopen(filename,'r');
heading = textscan(fid,'%s %s %s',1);
fgetl(fid); %advance the file pointer one line
data = textscan(fid,'%n %n %n');%read the rest of the data
fclose(fid);

In questo caso 'header' sarà un array di celle contenente celle con ciascuna intestazione di colonna all'interno, quindi dovrai cambiarle in array di celle di stringhe o qualunque cosa tu voglia. 'data' sarà una matrice di celle contenente una matrice numerica per ogni colonna che leggi, quindi dovrai combinarle per creare una matrice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top