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 循环更快的方法,因为这需要很长时间?
我已经找到了 mat2cell
和 cellfun
之类的函数,但它们并没有真正满足我的需要,是吗?
您可以预分配内存以提高性能:
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));
在 Matlab 中,我得到了三个矩阵(由向量组成)x, y, z
,每个大小 3xn
。
我想将它们合并到一个包含 n
个条目的单元格中,每个条目都是一个 3x3
矩阵:
for i=1:n
C{i} = [x(:,i), y(:,i), z(:,i)];
end
有没有比使用这个 for 循环更快的方法,因为这需要很长时间?
我已经找到了 mat2cell
和 cellfun
之类的函数,但它们并没有真正满足我的需要,是吗?
您可以预分配内存以提高性能:
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));