2016-08-04 218 views
0

我有一個3×1單元陣列看起來像這樣:分割三維矩陣劃分爲多個二維矩陣

x={rand(256,901,160);rand(256,901,160);rand(256,901,160)}; 

    [256x901x160 double] 
    [256x901x160 double] 
    [256x901x160 double] 

我想利用第三維和其分割成160個不同的二維矩陣,所以160 256x901 ]矩陣。我想這樣做,因爲我寫了不同的函數,採用2d矩陣。

我希望的輸出將是一個3x160單元陣列,其中包含256x901的矩陣。

我知道我需要使用重塑或mat2cell,但我不太確定的語法。

編輯

我發現了一個較慢的方式做到這一點,但它不是偉大的..

for i = 1:length(x) 
    for k = 1:160 
     y{:,k}= x{i}(:,:,k); 
    end 
end 

任何建議,以提高速度?

回答

1

下面是較小的陣列爲例,它適用於你的例子太多:

x = {rand(3,4,5);rand(3,4,5);rand(3,4,5)}; 
y = cell(length(x),size(x{1},3)); 
for k = 1:length(x) 
    t = reshape(x{k},[size(x{1},1) size(x{1},2)*size(x{1},3)]); 
    y(k,:) = mat2cell(t,size(x{1},1),ones(size(x{1},3),1)*size(x{1},2)); 
end 

我的電腦上它需要0.36035秒,你的電池陣列。

0

這是怎麼回事?

x ={rand(256,901,160), rand(256,901,160), rand(256,901,160)}'; 

x_1 = x{1}; 
x_2 = x{2}; 
x_3 = x{3}; 

two_d_arrays = cell(3, 160); 

for k = 1:size(two_d_arrays, 2) 
    two_d_arrays{1, k} = x_1(:, :, k); 
    two_d_arrays{2, k} = x_2(:, :, k); 
    two_d_arrays{3, k} = x_3(:, :, k); 
end  
1

我嘗試了一些不同的方法,但是我發現您自己的實現方式與其他解決方案相比是最快的。 如果你想要更多的速度,你可以考慮一個parfor循環。 (並行計算)