2016-03-21 12 views
0

I Zellen-Arrays erstellt haben, und stellen Werte, die die Schleife .. Hier ist, was ich getan habe:Löschen von leeren Zellen-Arrays

mycell =cell(1,100,num);  %% assume num anything 
idx = 1; 
[a,b] = size(depth); 
for i=1:a 
for j=1:b 
     if isfinite(depth(i,j)) 
     for segId=1:2 
     mycell{:,idx,segId} = depth(i,j); 
     idx=idx+1; 

Am Ende habe ich wie folgt zur Folge habe:

mycell(;,:,1) = 
[1] [1.2] [1.222] [] [] [] [0.7] [06] [] [0.34] .....[100n] 

mycell(;,:,2) = 
[] [] [] [1.33] [0.5] [0.3] [] [] [0.5] [] .....[100n] 

Gibt es eine Möglichkeit, die leere Zelle in diesen Zellenarrays zu löschen ...

Oder gibt es eine Möglichkeit, wie ich eine Ausgabe wie folgt bekommen kann: - [1 * 9 Werte] [1 * 88 Werte] und so auf ... wie auf Zellenfeld und erhalten v ist in einer Zelle ... Das kann ich wegen dieser Schleife nicht machen.

+1

'myzelle (cellfun (@isempty, mycell)) = []'? –

Antwort

0

Um leere Zellen zu entfernen, ist trivial (ähnlich zu Luis's post). Im Wesentlichen ruft dies isempty für jedes Zellenelement auf und verwendet dann dieses logische Array zum Indexieren in mycell und ruft nur die nicht leeren Werte ab.

newcell = mycell(cellfun(@isempty, mycell)); 

Sie erwähnen jedoch die Kombination mehrerer Elemente in einem einzigen Element. Sie können dies tun, indem Sie {:} Erweiterung verwenden. Im Wesentlichen erweitert dies alle Elemente, die Sie indiziert haben, in separate Eingaben. Wenn wir also die Eingaben für cat machen, können wir alle Elemente entlang der angegebenen Dimension verketten. in Ihren Daten

a = {1, 2, 3}; 
cat(2, a{:}); 

    [1 2 3] 

Also, wir leicht alle Daten entlang dem ersten Index der dritten Dimension verbinden könnten:

einfach demonstrieren

item = cat(2, mycell{:,:,1}); 

Wir können dies auch vollständig zu glätten Ihre Daten entlang der dritten Dimension.

newcell = arrayfun(@(x)cat(2, mycell{:,:,x}), 1:size(mycell, 3), 'uni', 0); 

Wenn Sie diesen zweiten Ansatz nehmen, müssen Sie sich nicht einmal um die erste Sorge zu entfernen leere Zellen, da sie nur während Verkettung verschwinden.

a = {1, 2, 3, [], 4}; 
cat(2, a{:}); 

    [1 2 3 4] 
+0

Danke. "isempty" -Funktionen funktionierten nicht. Es entfernt alle leeren Zellen, kombiniert aber das Ergebnis von mycell (:,:, 1) und mycell (:,:, 2) zu einem ans, deshalb habe ich diese Frage hier gestellt. Der letzte Ansatz von dir hat das Problem gelöst. – Akash

+0

Als das vorherige Ergebnis habe ich erreicht wie [1 * 9 single] und so weiter ... Kann ich sie irgendwie in Matrix konvertieren, d. H. Jede einzelne Zelle in andere Matrix. ? – Akash

+0

@Akash Ja, Sie können 'num2cell' verwenden. 'm = num2cell (data)' – Suever

Verwandte Themen