2016-11-15 5 views
0

У меня есть A и B массив ячеек матриц внутри. Я хочу, чтобы получить Ccellarray векторизации умножения матрицы

A = 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 

B = 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 

K = magic(18); 

В течение цикла:

C = cell(8,1); 
for ii = 1:8 
    C{ii} = K*A{ii}'*B{ii}; 
end 

Как я могу сделать это в векторизованном виде (клетка)?

+0

Я не вижу, как вы могли бы векторизовать без преобразования массивов ячеек в многомерные массивы. –

+0

@ Luis Mendo. Я хочу, чтобы я обратился к массиву ячеек в конце результатов C. В середине процесса я могу использовать многомерные массивы. Но я все еще хочу использовать ячейку для хранения всех матриц в конце. – petersen

ответ

0

Хотя возможно,

K = repmat({K}, 8,1); 
C = spblkdiag(K{:}) * spblkdiag(A{:}).' * spblkdiag(B{:}); 
C = reshape(nonzeros(C), 18,[]); 
C = mat2cell(C, 18,18 * ones(8,1))'; 

Я еще предлагаю вам использовать цикл.