Wie kann ich von NaNs in MATLAB los?
Frage
Ich habe Dateien, die viele leere Zellen, die als NaNs erscheinen, wenn ich cell2mat
verwenden, aber das Problem ist, wenn ich die Mittelwerte erhalten müssen kann ich nicht mit diesem arbeiten, wie es Fehler zeigt mit NaN. In Excel es mit Blick auf NaN-Werten, so wie mache ich das gleiche in MATLAB?
Darüber hinaus schreibe ich eine Datei xlswrite
mit:
xlswrite('test.xls',M);
Ich habe Daten in allen Zeilen außer 1. Wie kann ich schreiben:
M(1,:) = ('time', 'count', 'length', 'width')
Mit anderen Worten, ich möchte M(1,1)='time'
, M(1,2)='count'
, und so weiter. Ich habe Daten von M(2,1)
zu M(10,20)
. Wie kann ich das tun?
Lösung
Mit ‚isfinite‘ Funktion aller NaN und Unendlichkeiten
loswerdenA = A (isfinite (A))
% der Zellenanordnung erzeugen die Spaltenüberschriften enthalten Column = { 'Spalte 1', 'Spalte 2' 'Spalte 3', 'Spalte 4', 'Spalte 5',‘‚};
% Schreiben Sie die Spaltenüberschriften zuerst xlswrite ( 'myFile1.xls', Column);
% die Daten direkt unterhalb der Spaltenüberschriften schreiben xlswrite ( 'newFile.xls', M 'Tabelle1', 'A2');
Andere Tipps
Wie AP weist zu Recht darauf hin , können Sie die Funktion isfinite
zu finden und nur endliche Werte in der Matrix zu halten. Sie können auch die Funktion isnan
. Allerdings können Werte aus Ihrer Matrix zu entfernen hat die unbeabsichtigte Folge Ihre Matrix in eine Zeile oder Spalte Vektor Umformung:
>> 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
Eine weitere Alternative ist es, einige Funktionen aus dem Statistics Toolbox zu verwenden (wenn Sie haben Zugriff darauf), die Deal entworfen werden mit Matrizen enthalten NaN-Werte . Da Sie mittelt erwähnen nehmen, können Sie prüfen wollen, 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
EDIT: , um Ihre weitere Frage über die Verwendung von xlswrite
, dieser Beispielcode soll eine Art und Weise veranschaulichen, können Sie Ihre Daten schreiben:
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 hat mehrere statistische Funktionen mit NaN Werten beschäftigen. Siehe nanmean, nanmedian, nanstd, nanmin, nanmax, etc.
Sie können wie so NaN ist auf eine beliebige Anzahl eingestellt:
mat(isnan(mat))=7 // my lucky number of choice.
ist vielleicht zu spät, aber ...
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