说实话,我一直不喜欢cell2mat
因为速度慢,所以我想出了一个替代解决方案以逗号分隔的列表反而!
变换向量元胞数组
这相当简单,只需使用colon运算符和垂直连接所有向量:
C = {[1,1]; [2,2]; [3,3]};
A = vertcat(C{:})
所以我们得到:
A =
1 1
2 2
3 3
转换元胞数组的元胞数组
这有点棘手。由于它是元胞数组的元胞数组,因此我们必须通过双重使用冒号和horzcat, 进而reshape将其转化为所需的矩阵。
C = {{1,1}; {2,2}; {3,3}};
V = [size(C{1}), 1]; V(find(V == 1, 1)) = numel(C);
A = reshape([horzcat(C{:}){:}], V)
所以我们得到:
A =
1 1
2 2
3 3
操纵V
确保A
可以正确地重塑形状,而无需显式指定输出尺寸(不幸的是,我没有为此找到一个衬垫)。这也适用于多维元胞数组:
C = {{1, 1; 1, 1}; {2, 2; 2, 2}; {3, 3; 3, 3}};
V = [size(C{1}), 1]; V(find(V == 1, 1)) = numel(C);
A = reshape([horzcat(C{:}){:}], V)
A(:,:,1) =
1 1
1 1
A(:,:,2) =
2 2
2 2
A(:,:,3) =
3 3
3 3
P.S
我认为最后一个示例的正确结果应该是 6×2 矩阵,而不是 2×2×3 矩阵。然而,这不是你所要求的,所以这是题外话。