2016-04-14 39 views
0

Matlab'da, her biri 3xn boyutunda x, y, z olmak üzere üç matris (vektörlerden oluşan) var. Ben n girişleri içeren bir hücreye bunları birleştirmek istediğiniz Matlab birleştirme matrisleri, hücreye

, her bir 3x3 matris: o yaş alır, çünkü döngü için bu kullanmaktan daha hızlı bir yolu,

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

var mı?

Zaten mat2cell ve cellfun gibi işlevler buldum, ancak hepsi gerçekten ihtiyacım olan şeyi yapmıyorlar değil mi?

cevap

2

bu deneyin:

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

Sen geliştirmek bellek önceden tahsis edebilirsiniz performans:

C = cell(n, 1); 
+0

Ve ayrıca başka bir şey için I' 'dan sayaç geçiş

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

, sen reshape kullanarak, bunun yerine o vektörize edebilirsiniz. 'ii' örneğin ... – Crowley

4

Taleplere bunu aradığınız kod, bir 3D dizi yerine kullanılacak başka. Daha az ek yük ile geliyor.

C = reshape([x; y; z], [3 3 n]); 
+0

Teşekkür ederim Peter, kodunuz gerektiği gibi gayet iyi çalışıyor. Hücreleri depolamak istediğim için Lincolns cevabını kabul ettim. Hücrede saklamak zorunda olmayan ve 3d dizileriyle iyi olmayan herkes için, bu da işe yarıyor! – SemtexB