【发布时间】:2011-03-06 21:09:03
【问题描述】:
表达式为:
for i=1:n
X(:,i) = [P{i}(:)];
end
其中 X 是 DxN 矩阵,P 是元胞数组。
【问题讨论】:
-
对不起,忘了提。 P{i} 是一个“[2x2 double]”,我认为它是一个矩阵。我使用 mat2cell 获得了它。据我了解, mat2cell 返回一个矩阵元胞数组。
表达式为:
for i=1:n
X(:,i) = [P{i}(:)];
end
其中 X 是 DxN 矩阵,P 是元胞数组。
【问题讨论】:
reshape(cat(3,P{:}),[numel(P{1}) n])
当然,上述解决方案只是为了好玩。我建议对这两种解决方案进行分析,并且仅在它具有显着的性能优势时才使用它。
可维护性和可读性也是编写代码时需要考虑的非常重要的因素。
【讨论】:
如果您通过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');
【讨论】:
你也许可以逃脱:
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() 以到达您想要的位置。
【讨论】: