2016-04-14 2 views
0

В Matlab у меня есть три матрицы (состоящие из векторов) x, y, z размера 3xn каждый.Matlab объединяет матрицы в ячейку

Я хочу, чтобы объединить их в ячейку с n записей, каждая 3x3 матрица:

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

Есть ли более быстрый способ, чем использовать это для цикла, потому что принимает возрастов?

Я уже нашел такие функции, как mat2cell и cellfun, но все они действительно не делают то, что мне нужно, не так ли?

ответ

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