Ich habe ein Array von leeren Zellen und Einsen, die ich in ein logisches Array konvertieren möchten, wobei die leeren Zellen Nullen sind. Wenn ich cell2mat benutze, werden die leeren Zellen ignoriert und ich bekomme eine Matrix von nur 1en, ohne Bezug auf den vorherigen Index, den sie hatten. Gibt es eine Möglichkeit, diese Operation ohne Schleifen durchzuführen?Ersetzen Sie leere Zellen durch logische 0 vor Cell2mat in MATLAB
Beispielcode:
for n=1:5 %generate sample cell array
mycellarray{n}=1;
end
mycellarray{2}=[] %remove one value for testing
Dinge, die ich versucht habe:
mylogicalarray=logical(cell2mat(mycellarray));
was dazu führt, [1,1,1,1], nicht [1,0,1,1, 1].
for n=1:length(mycellarray)
if isempty(mycellarray{n})
mycellarray{n}=0;
end
end
mylogicalarray=logical(cell2mat(mycellarray));
funktioniert, aber verwendet Schleifen.
Aufruf von 'cellfun ('isempty', mycellarray)' ist viel schneller als die Funktion handle; 'isempty()' ist eine von mehreren Funktionen, die enorme Geschwindigkeitszuwächse genießen, wenn sie explizit im cellfun() 'Aufruf genannt werden. –
Was ist der Zweck der '~' vor 'cellfun'? – Chad
Ah, '~' ist der logische Operator nicht. – Chad