2016-07-24 7 views
0

Wie kann ich ein Zellenfeld in eine Standardmatrix konvertieren?Zelle in Standardmatrix konvertieren

Zum Beispiel:
A{1} enthält eine 11 Zeilen * 2 Spalten Matrix
A{2} a x Zeilen * 2 Spalten (es ist immer zwei Spalten Matrizen)
...
A{n} A x * 2 Zeilen-Spalten-Matrix.

Die Anzahl der Zeilen, x, variiert jedes Mal, wenn sich der Index der Zelle, n, ändert.
Mit anderen Worten, jeder Zelleninhalt ist immer 2 Spalten breit, enthält aber eine unterschiedliche Anzahl von Zeilen.

Ich möchte sie in einem Standard-Array B (x, 1: 2, n) mit 2 Spalten und x je nach der Variation von n zu speichern. Wenn A{1} zum Beispiel 11x2 ist, werden diese Werte in B wie folgt gespeichert: B(1:11,1:2,1).
Wenn A{n} x * 2 ist, würde B diese Werte als B(1:x,1:2,n) speichern.

Danke.

+0

Können Sie bitte einige Beispiele Ihrer Matrizen veröffentlichen? –

+0

Dies ändert dynamisch Ihre erste Dimension der dreidimensionalen Matrix "B". Und füllen Sie die so weit nicht definierten Werte auf Nullen. Nicht sicher, ob Sie das genau wollen. –

+2

Ein Standard-Array (Nicht-Zelle) 'B (x, 1: 2, n)' kann für jedes 'n' kein anderes' x' haben –

Antwort

1

Generieren von Testdaten:

A{1} = ones(11, 2) 
A{2} = 2 * ones(22, 2) 
A{3} = 3 * ones(33, 2) 

A = 

    [11x2 double] [22x2 double] [33x2 double] 

>> whos A 
    Name  Size   Bytes Class Attributes 

    A   1x3    1392 cell 

Der manuelle Ansatz (wenn Sie wissen, die Größen):

B(1:11, 1:2, 1) = A{1} 
B(1:22, 1:2, 2) = A{2} 
B(1:33, 1:2, 3) = A{3} 

Der geschlungene Ansatz:

for k = 1:numel(A) 
    B(1:size(A{k},1), 1:2, k) = A{k}; 
end 
>> whos B 
    Name  Size    Bytes Class  Attributes 

    B   33x2x3    1584 double 

Wie Sie sehen können, die größte erste Dimension Ihrer Matrizen wird die Größe der ersten Dimension der dreidimensionalen Matrix definieren, das heißt:

>> B(:, :, 2) 
= 
2  2 
2  2 
2  2 
2  2 
2  2 
2  2 
... 
2  2 
2  2 
0  0 
... 
0  0 

Edit: Sie können dann vorbelegt auch B:

B = zeros(max(cellfun('size', A, 1)), max(cellfun('size', A, 2)), numel(A))