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?

War es hilfreich?

Lösung

Mit ‚isfinite‘ Funktion aller NaN und Unendlichkeiten

loswerden

A = 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top