在Matlab中,我得到了每个尺寸为3xn
的三个矩阵(由矢量组成)x, y, z
。Matlab将矩阵合并到单元格
我想他们n
条目合并到一个小区,每一个3x3
矩阵:
for i=1:n
C{i} = [x(:,i), y(:,i), z(:,i)];
end
难道还有比使用这个for循环更快的方法,因为这需要年龄?
我已经找到像mat2cell
和cellfun
这样的函数,但他们都没有真正做我需要的东西,是吗?
在Matlab中,我得到了每个尺寸为3xn
的三个矩阵(由矢量组成)x, y, z
。Matlab将矩阵合并到单元格
我想他们n
条目合并到一个小区,每一个3x3
矩阵:
for i=1:n
C{i} = [x(:,i), y(:,i), z(:,i)];
end
难道还有比使用这个for循环更快的方法,因为这需要年龄?
我已经找到像mat2cell
和cellfun
这样的函数,但他们都没有真正做我需要的东西,是吗?
试试这个:
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));
您可以预先分配的内存提高性能:
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]);
谢谢彼得,你的代码工作得很好,因为它需要。正如我要求将它存储在单元格中,我接受了林肯斯的回答。对于没有必要将其存储在单元中并且对3D阵列没有问题的其他人来说,这也适用! – SemtexB
并且还从'i'计数器切换到别的。 'ii'例如... – Crowley