2016-05-17 8 views
0

Ich habe eine Zelle mit ungleich großen Doppelelementen.Zellenelemente spaltenweise in Matlab erweitern

Zum Beispiel

cc2 = 
[1x32 double]  
[1x3 double]  
[1x3 double] 
[1x2 double]  
[1x457 double]  
[1x200 double] 
[1x23 double]    
[1x10 double] 
. 
.  
[so on] 

Jedes Zellenelement ist 1xn wo n>=2

ich jedes Zellenelement spaltenweise in seine Bestandteile verdoppelt erweitern möchten.

Ich habe versucht, so etwas wie dieses, aber diese nicht

lens = sum(cellfun('length',cc2(:,1)),2); 
out = zeros(numel(lens),max(lens)); 
out(bsxfun(@le,[1:max(lens)],lens)) = horzcat(cc2{:}); 

Die einzelnen Elemente erweitern reihenweise, aber ich brauche sie spaltenweise erweitern funktioniert.

Zum Beispiel

input = {[1,2,3];[4];[5,6]}; 
output = [1,2,3;4,0,0;5,6,0]; 

Könnte jemand bitte helfen?

Danke!

+1

Wie genau soll Ihre Ausgabe aussehen? Willst du es mit Nullen aufgefüllt? – Suever

+0

Ja, gepolstert mit Nullen ist in Ordnung, aber ich möchte, dass sie sich ausdehnen! –

Antwort

1

Was bedeutet

jede Zelle Element spaltenweise in seine Bestandteile erweitern verdoppelt

bedeuten? Können Sie bitte eine Beispieleingabe und -ausgabe angeben? Also zum Beispiel, wenn Ihre Eingabe ist

C = {[1,2,3]; 
    [4]; 
    [5,6]} 

Dann was willst du als Ausgang?

Wenn Sie das wollen

E = [1,2,3,4,5,6] 

dann

E = [C{:}] 

versuchen Wenn Sie

E = [1,2,3; 
    4,0,0; 
    5,6,0] 

Dann versuchen this answer etwas Ähnliches wollen:

n = max(cellfun(@(x)size(x,2),C)) 
Ecell = cellfun(@(x)[x, zeros(1,n-numel(x))], C, 'uni', 0); 
E = cat(1,E{:}) 

Beachten Sie, dass Ecell in dem obigen Code wird

Ecell == {[1,2,3]; 
      [4,0,0]; 
      [5,6,0]} 

gleich sein, die noch eine andere gültige Interpretation Ihrer Frage.

+0

Ich will E = [1,2,3; 4,0,0; 5,6,0]; –

+1

@ EyesOfÖzil bitte fügen Sie das zu Ihrer Frage hinzu. Auch meine Antwort wird mit Code für das aktualisiert. – Dan

+0

Ja, das ist, was ich gesucht habe. Vielen Dank! –