2011-03-06 51 views
3

表達式爲:在MATLAB中有這種表達式的非迭代等價物嗎?

for i=1:n 
    X(:,i) = [P{i}(:)]; 
end 

其中X是DXN矩陣,並且P是細胞陣列。

+0

是'P {i}'矩陣嗎? – Jacob 2011-03-06 21:21:02

+0

對不起,忘了提。 P {i}是一個「[2x2 double]」,我認爲它是一個矩陣。我使用mat2cell獲得它。根據我的理解,mat2cell返回一個矩陣的單元陣列。 – ptikobj 2011-03-06 21:36:05

回答

1

如果您通過mat2cell獲得了單元陣列,則可能需要將圖像塊排列到數組X的列中。這可以通過使用命令在單個步驟中實現IM2COL

%# rearrange the large array so that each column of X 
%# corresponds to the 4 pixels of each 2-by-2 block 
X = im2col(largeArray,[2 2],'distinct'); 
+0

優秀,這正是我所期待的!事實上,上述代碼的背景是PCA圖像分析。 – ptikobj 2011-03-07 07:24:17

3
reshape(cat(3,P{:}),[numel(P{1}) n]) 

當然,上述解決方案只是爲了好玩。我建議分析這兩種解決方案,只有在具有顯着的性能優勢時才使用此解決方案。

在編寫代碼時,維護和可讀性也是非常重要的考慮因素。

1

您也許能矇混過關:

P{1} = [ 1 2; 3 4]; 
P{2} = [ 7 8; 9 10]; 
P{3} = [ 11 12; 13 14]; 
X = [P{:}] 

X = 

    1  2  7  8 11 12 
    3  4  9 10 13 14 

然後某種重塑()來得到你想要的。