2016-04-14 345 views
0

在Matlab中,我得到了每个尺寸为3xn的三个矩阵(由矢量组成)x, y, zMatlab将矩阵合并到单元格

我想他们n条目合并到一个小区,每一个3x3矩阵:

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

难道还有比使用这个for循环更快的方法,因为这需要年龄?

我已经找到像mat2cellcellfun这样的函数,但他们都没有真正做我需要的东西,是吗?

回答

2

试试这个:

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)); 
0

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

C = cell(n, 1); 
+0

并且还从'i'计数器切换到别的。 'ii'例如... – Crowley

4

除非你正在呼吁要求它的代码,使用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]); 
+0

谢谢彼得,你的代码工作得很好,因为它需要。正如我要求将它存储在单元格中,我接受了林肯斯的回答。对于没有必要将其存储在单元中并且对3D阵列没有问题的其他人来说,这也适用! – SemtexB