2016-07-24 62 views
0

如何將單元格數組轉換爲標準矩陣?將單元格轉換爲標準矩陣

例如:
A{1}包含一個11行×2列的矩陣
A{2}一個X線* 2列(它總是兩點矩陣)
...
A{n}一個X線* 2列的矩陣。

行數x每次單元格索引n都發生變化。
換句話說,每個單元格內容總是2列寬,但包含不同數量的行。

我想將它們存儲在一個標準數組B(x,1:2,n)和2列中,並且x根據n的變化而變化。

例如,如果A{1}爲11x2,則這些值存儲在B中,如下所示:B(1:11,1:2,1)
如果A{n}是x * 2,則B將把這些值存儲爲B(1:x,1:2,n)

謝謝。

+0

你可以發表你的矩陣的一些例子嗎? –

+0

這會動態地改變你的三維矩陣B的第一維。並將迄今爲止未定義的值填入零。不知道你是否真的想要。 –

+2

一個標準(非單元)數組'B(x,1:2,n)'不能有不同''''每個'n' –

回答

1

生成測試數據:

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 

手動方法(當你知道大小):

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

的環形辦法:

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 

正如你所看到的,你的矩陣的最大的第一個維度將決定您的三維矩陣的第一維的大小,即:

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

編輯:然後你可以同時預分配B:

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