2016-04-14 9 views
0

Matlabには、それぞれベクトル3xnx, y, zという3つの行列があります。私はnエントリ、各3x3マトリックスでセルにそれらをマージしたいMatlabはセルに行列をマージする

:それは年齢がかかるため

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

は、ループのためにこれを使用するよりもより高速な方法は、ありますか?

私はすでに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

あなたは需要にそれを呼び出しているコードは、3次元配列を代わりに使用していない限り。それははるかに少ないオーバーヘッドを伴います。この形式では

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

Peterに感謝します。あなたのコードは、必要に応じて完璧に機能します。私はそれをセルに保管するように要求したので、私はリンカーンズの答えを受け入れました。それを細胞に保存する必要がなく、3d配列でうまくいく他のすべての人にとって、これも機能します! – SemtexB