MATLAB - Importazione dati

Importare dati in MATLAB significa caricare dati da un file esterno. Ilimportdataconsente di caricare vari file di dati di diversi formati. Ha le seguenti cinque forme:

Sr.No. Descrizione della funzione
1

A = importdata(filename)

Carica i dati nell'array A dal file indicato con nome file .

2

A = importdata('-pastespecial')

Carica i dati dagli appunti di sistema anziché da un file.

3

A = importdata(___, delimiterIn)

Interpreta delimiterIn come separatore di colonna nel file ASCII, nel nome del file o nei dati degli appunti. È possibile utilizzare delimiterIn con uno qualsiasi degli argomenti di input nelle sintassi precedenti.

4

A = importdata(___, delimiterIn, headerlinesIn)

Carica i dati dal file ASCII, dal nome del file o dagli appunti, leggendo i dati numerici a partire dalle intestazioni di riga In + 1 .

5

[A, delimiterOut, headerlinesOut] = importdata(___)

Restituisce il carattere delimitatore rilevato per il file ASCII di input in delimiterOut e il numero di righe di intestazione rilevate in headerlinesOut , utilizzando uno degli argomenti di input nelle sintassi precedenti.

Per impostazione predefinita, Octave non supporta la funzione importdata () , quindi dovrai cercare e installare questo pacchetto per far funzionare i seguenti esempi con la tua installazione di Octave.

Esempio 1

Cerchiamo di caricare e visualizzare un file immagine. Crea un file di script e digita il seguente codice al suo interno:

filename = 'smile.jpg';
A = importdata(filename);
image(A);

Quando esegui il file, MATLAB visualizza il file immagine. Tuttavia, è necessario memorizzarlo nella directory corrente.

Esempio 2

In questo esempio, importiamo un file di testo e specifichiamo Delimitatore e Intestazione colonna. Creiamo un file ASCII delimitato da spazi con intestazioni di colonna, denominato settimanaledata.txt .

Il nostro file di testo Weeklydata.txt ha questo aspetto:

SunDay  MonDay  TuesDay  WednesDay  ThursDay  FriDay  SaturDay
95.01   76.21   61.54    40.57       55.79    70.28   81.53
73.11   45.65   79.19    93.55       75.29    69.87   74.68
60.68   41.85   92.18    91.69       81.32    90.38   74.51
48.60   82.14   73.82    41.03       0.99     67.22   93.18
89.13   44.47   57.63    89.36       13.89    19.88   46.60

Crea un file di script e digita il seguente codice al suo interno:

filename = 'weeklydata.txt';
delimiterIn = ' ';
headerlinesIn = 1;
A = importdata(filename,delimiterIn,headerlinesIn);

% View data
for k = [1:7]
   disp(A.colheaders{1, k})
   disp(A.data(:, k))
   disp(' ')
end

Quando si esegue il file, viene visualizzato il seguente risultato:

SunDay
   95.0100
   73.1100
   60.6800
   48.6000
   89.1300
 
MonDay
   76.2100
   45.6500
   41.8500
   82.1400
   44.4700
 
TuesDay
   61.5400
   79.1900
   92.1800
   73.8200
   57.6300

WednesDay
   40.5700
   93.5500
   91.6900
   41.0300
   89.3600
 
ThursDay
   55.7900
   75.2900
   81.3200
   0.9900
   13.8900
 
FriDay
   70.2800
   69.8700
   90.3800
   67.2200
   19.8800

SaturDay
   81.5300
   74.6800
   74.5100
   93.1800
   46.6000

Esempio 3

In questo esempio, importiamo i dati dagli appunti.

Copia le seguenti righe negli appunti:

Mathematics is simple

Crea un file di script e digita il codice seguente:

A = importdata('-pastespecial')

Quando si esegue il file, viene visualizzato il seguente risultato:

A = 
   'Mathematics is simple'

I / O file di basso livello

La funzione importdata è una funzione di alto livello. Le funzioni di I / O su file di basso livello in MATLAB consentono il massimo controllo sulla lettura o la scrittura di dati in un file. Tuttavia, queste funzioni richiedono informazioni più dettagliate sul file per funzionare in modo efficiente.

MATLAB fornisce le seguenti funzioni per le operazioni di lettura e scrittura a livello di byte o carattere:

Funzione Descrizione
fclose Chiudi uno o tutti i file aperti
feof Test per la fine del file
ferror Informazioni sugli errori di I / O dei file
fgetl Legge la riga dal file, rimuovendo i caratteri di nuova riga
fgets Legge la riga dal file, mantenendo i caratteri di nuova riga
fopen Apri file o ottieni informazioni sui file aperti
fprintf Scrivi i dati in un file di testo
fread Legge i dati dal file binario
frewind Sposta l'indicatore di posizione del file all'inizio del file aperto
fscanf Leggi i dati dal file di testo
fseek Sposta nella posizione specificata nel file
ftell Posizione nel file aperto
fwrite Scrive i dati in un file binario

Importa file di dati di testo con I / O di basso livello

MATLAB fornisce le seguenti funzioni per l'importazione di basso livello di file di dati di testo:

  • Il fscanf la funzione legge i dati formattati in un file di testo o ASCII.

  • Il fgetl e fgets le funzioni leggono una riga di un file alla volta, dove un carattere di nuova riga separa ogni riga.

  • Il fread la funzione legge un flusso di dati a livello di byte o bit.

Esempio

Abbiamo un file di dati di testo "myfile.txt" salvato nella nostra directory di lavoro. Il file memorizza i dati sulle precipitazioni per tre mesi; Giugno, luglio e agosto per l'anno 2012.

I dati in miofile.txt contengono serie ripetute di misurazioni di ora, mese e precipitazioni in cinque punti. I dati dell'intestazione memorizzano il numero di mesi M; quindi abbiamo M set di misurazioni.

Il file ha questo aspetto:

Rainfall Data
Months: June, July, August
 
M = 3
12:00:00
June-2012
17.21  28.52  39.78  16.55 23.67
19.15  0.35   17.57  NaN   12.01
17.92  28.49  17.40  17.06 11.09
9.59   9.33   NaN    0.31  0.23 
10.46  13.17  NaN    14.89 19.33
20.97  19.50  17.65  14.45 14.00
18.23  10.34  17.95  16.46 19.34
09:10:02
July-2012
12.76  16.94  14.38  11.86 16.89
20.46  23.17  NaN    24.89 19.33
30.97  49.50  47.65  24.45 34.00
18.23  30.34  27.95  16.46 19.34
30.46  33.17  NaN    34.89  29.33
30.97  49.50  47.65  24.45 34.00
28.67  30.34  27.95  36.46 29.34
15:03:40
August-2012
17.09  16.55  19.59  17.25 19.22
17.54  11.45  13.48  22.55 24.01
NaN    21.19  25.85  25.05 27.21
26.79  24.98  12.23  16.99 18.67
17.54  11.45  13.48  22.55 24.01
NaN    21.19  25.85  25.05 27.21
26.79  24.98  12.23  16.99 18.67

Importeremo i dati da questo file e visualizzeremo questi dati. Procedi nel seguente modo:

  • Apri il file con fopen funzione e ottenere l'identificatore del file.

  • Descrivi i dati nel file con format specifiers, ad esempio '%s"per una stringa"%d"per un numero intero o"%f'per un numero in virgola mobile.

  • Per saltare i caratteri letterali nel file, includerli nella descrizione del formato. Per saltare un campo dati, utilizza un asterisco ("*") nello specificatore.

    Ad esempio, per leggere le intestazioni e restituire il singolo valore per M, scriviamo -

    M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);
  • Per impostazione predefinita, fscanflegge i dati in base alla nostra descrizione del formato fino a quando non trova alcuna corrispondenza per i dati o raggiunge la fine del file. Qui useremo il ciclo for per leggere 3 set di dati e ogni volta leggerà 7 righe e 5 colonne.

  • Creeremo una struttura denominata mydata nell'area di lavoro per memorizzare i dati letti dal file. Questa struttura ha tre campi: ora , mese e array raindata .

Crea un file di script e digita il seguente codice al suo interno:

filename = '/data/myfile.txt';
rows = 7;
cols = 5;
 
% open the file
fid = fopen(filename);
 
% read the file headers, find M (number of months)
M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);
 
% read each set of measurements
for n = 1:M
   mydata(n).time = fscanf(fid, '%s', 1);
   mydata(n).month = fscanf(fid, '%s', 1);
 
   % fscanf fills the array in column order,
   % so transpose the results
   mydata(n).raindata  = ...
      fscanf(fid, '%f', [rows, cols]);
end
for n = 1:M
   disp(mydata(n).time), disp(mydata(n).month)
   disp(mydata(n).raindata)
end
 
% close the file
fclose(fid);

Quando si esegue il file, viene visualizzato il seguente risultato:

12:00:00
June-2012
   17.2100   17.5700   11.0900   13.1700   14.4500
   28.5200       NaN    9.5900       NaN   14.0000
   39.7800   12.0100    9.3300   14.8900   18.2300
   16.5500   17.9200       NaN   19.3300   10.3400
   23.6700   28.4900    0.3100   20.9700   17.9500
   19.1500   17.4000    0.2300   19.5000   16.4600
   0.3500   17.0600   10.4600   17.6500   19.3400

09:10:02
July-2012
   12.7600       NaN   34.0000   33.1700   24.4500
   16.9400   24.8900   18.2300       NaN   34.0000
   14.3800   19.3300   30.3400   34.8900   28.6700
   11.8600   30.9700   27.9500   29.3300   30.3400
   16.8900   49.5000   16.4600   30.9700   27.9500
   20.4600   47.6500   19.3400   49.5000   36.4600
   23.1700   24.4500   30.4600   47.6500   29.3400

15:03:40
August-2012
   17.0900   13.4800   27.2100   11.4500   25.0500
   16.5500   22.5500   26.7900   13.4800   27.2100
   19.5900   24.0100   24.9800   22.5500   26.7900
   17.2500       NaN   12.2300   24.0100   24.9800
   19.2200   21.1900   16.9900       NaN   12.2300
   17.5400   25.8500   18.6700   21.1900   16.9900
   11.4500   25.0500   17.5400   25.8500   18.6700