Matlab合并矩阵到单元格

Matlab merge matrices to cell

在 Matlab 中,我得到了三个矩阵(由向量组成)x, y, z,每个大小 3xn

我想将它们合并到一个包含 n 个条目的单元格中,每个条目都是一个 3x3 矩阵:

for i=1:n
    C{i} = [x(:,i), y(:,i), z(:,i)];
end

有没有比使用这个 for 循环更快的方法,因为这需要很长时间?

我已经找到了 mat2cellcellfun 之类的函数,但它们并没有真正满足我的需要,是吗?

您可以预分配内存以提高性能:

C = cell(n, 1);

除非您调用的代码需要它,否则请改用 3D 数组。它的开销要少得多。

C = zeros(3, 3, n);
for ii = 1:n
    C(:, :, ii) = [x(:,ii) y(:,ii) z(:,ii)];
end

在这种形式中,您可以使用 reshape:

对其进行矢量化
C = reshape([x; y; z], [3 3 n]);

试试这个:

t = reshape([x; y; z], [3 3*n]); %//reshape your vectors into a matrix that could be use nicely with mat2cell
C = mat2cell(t, 3, 3*ones(1,n));