在MATLAB中是否存在非迭代等价的表达式?

时间:2011-03-06 21:09:04

标签: matlab matrix cell

表达式是:

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

其中X是DxN矩阵,P是单元阵列。

3 个答案:

答案 0 :(得分:3)

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

当然,上述解决方案只是为了好玩。我建议对两种解决方案进行分析,如果它具有显着的性能优势,则仅使用此解决方案。

维护和可读性也是编写代码时需要考虑的重要因素。

答案 1 :(得分: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

然后某种reshape()来到你想去的地方。

答案 2 :(得分: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');