Ich brauche Hilfe, um diese Funktion zu beschleunigen, die ich erstellt habe, um NaN-Elemente in einem Zellenfeld zu entfernen.MATLAB - Entfernen Sie NaN-Elemente im Zellenfeld. Hilfe, um eine Funktion zu beschleunigen
Um meine Funktion besser mit einem Beispiel zu erklären. Angenommen, wir haben ein Zellenarray von Ich habe ein Zellenarray auf dem Formular indx{ii}
, wobei jedes ii
ein Array der Größe 1xNii
ist (dies bedeutet, dass die Arrays unterschiedliche Größe haben) mit NaN
Elementen.
datawithNaN{1}=[1,4,8,6];
datawithNaN{2}=[4,6,2];
datawithNaN{3}=[9,8,NaN];
datawithNaN{4}=[3,NaN,NaN];
datawithNaN{5}=[NaN,NaN,NaN,NaN];
Was ich will die Funktion Funktion zu tun ist, entfernen Sie alle NaN-Elemente im Zell-Array. So ist die Antwort für das Beispiel sollte sein:
datawithoutNaN{1}=[1,4,8,6];
datawithoutNaN{2}=[4,6,2];
datawithoutNaN{3}=[9,8];
datawithoutNaN{4}=[3];
datawithoutNaN{5}=[];
Bisher habe ich eine Funktion geschrieben, die mir das Ergebnis gibt ich will, aber es dauert zu lange, besonders wenn sie mit großen Zellen-Arrays oder große Arrays innerhalb des Zellenfeldes Arbeits . Meine Funktion ist:
function result = rmNaN(datawithNaN)
[row_cell, col_cell] = size(datawithNaN);
result = cell(row_cell, col_cell);
for i=1:row_cell
for j=1:col_cell
[row,col]=size(datawithNaN{i,j});
if col>row
datawithNaN{i,j}=datawithNaN{i,j}';
[row,~]=size(datawithNaN{i,j});
end
for k=1:row
if ~isnan(datawithNaN{i,j}(k))
result{i,j}(k) = datawithNaN{i,j}(k);
else
continue
end
end
end
end
Ich habe es versucht und es funktioniert perfekt! Und einfacher als das, was ich geschrieben hatte! Vielen Dank :). –