Domanda

Ho i file che hanno molte celle vuote che appaiono come NaNs quando uso cell2mat, ma il problema è quando ho bisogno di ottenere i valori medi non posso lavorare con questo come dimostra l'errore con NaN. In Excel si affaccia valori Nan, così come faccio a fare lo stesso in MATLAB?

Inoltre, sto scrivendo un file usando xlswrite:

xlswrite('test.xls',M);

Non ho i dati in tutte le righe tranne 1. Come faccio a scrivere:

M(1,:) = ('time', 'count', 'length', 'width')

In altre parole, voglio M(1,1)='time', M(1,2)='count', e così via. Ho i dati da M(2,1) a M(10,20). Come posso fare questo?

È stato utile?

Soluzione

Utilizzare la funzione 'isFinite' per sbarazzarsi di tutti i Nan e infiniti

A = A (isFinite (A))

  

% creare la matrice di celle contenente la colonna   columnHeader = { 'Colonna 1', 'Colonna 2', 'Colonna 3', 'Colonna 4', 'Colonna 5',' '};

     

% scrivere le intestazioni delle colonne primo   xlswrite ( 'myFile1.xls', columnHeader);

     

% scrivere i dati direttamente sotto le intestazioni delle colonne   xlswrite ( 'newFile.xls', M, 'Foglio1', 'A2');

Altri suggerimenti

Come AP fa giustamente notare , è possibile utilizzare la funzione di isfinite per trovare e mantenere solo i valori finiti nella vostra matrice. È inoltre possibile utilizzare la funzione isnan . Tuttavia, la rimozione valori dalla matrice può avere la conseguenza non voluta di rimodellare matrice in una riga o vettore colonna:

>> mat = [1 2 3; 4 NaN 6; 7 8 9]  % A sample 3-by-3 matrix

mat =

     1     2     3
     4   NaN     6
     7     8     9

>> mat = mat(~isnan(mat))  % Removing the NaN gives you an 8-by-1 vector

mat =

     1
     4
     7
     2
     8
     3
     6
     9

Un'altra alternativa è quella di utilizzare alcune funzioni dal Statistics Toolbox (se si ha accesso ad esso) che sono progettati per che fare con matrici contenente NaN valori . Dal momento che si MENZIONE prendere le medie, si consiglia di controllare le nanmean :

>> mat = [1 2 3; 4 NaN 6; 7 8 9];
>> nanmean(mat)

ans =

     4     5     6     % The column means computed by ignoring NaN values


Modifica Per rispondere alla tua domanda aggiuntiva sull'uso di xlswrite , questo codice di esempio dovrebbe illustrare un modo è possibile scrivere i dati:

C = {'time','count','length','width'};  % A cell array of strings
M = rand(10,20);                        % A 10-by-20 array of random values
xlswrite('test.xls',C);           % Writes C to cells A1 through D1
xlswrite('test.xls',M,'A2:T11');  % Writes M to cells A2 through T11

Statistics Toolbox ha diverse funzioni statistiche per affrontare valori NaN. Vedere nanmean, nanmedian, nanstd, nanmin, nanmax, ecc.

È possibile impostare Nan ad un numero arbitrario in questo modo:

mat(isnan(mat))=7 // my lucky number of choice. 

potrebbe essere troppo tardi, ma ...

x = [1 2 3; 4 inf 6; 7 -inf NaN];
x(find(x == inf)) = 0; //for inf
x(find(x == -inf)) = 0; //for -inf
x(find(isnan(x))) = 0; //for NaN
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top