2016-10-25 4 views
0

У меня есть матрица A=[1,2,3] и ячейка B={[1,2,3],[1,2,5],[1,2,6]}. Я хотел бы произведение матричных элементов подобной ячейки что означает A * B ={1*[1,2,3],2*[1,2,5],3*[1,2,6]}; Без цикла в MATLABМножественная матрица в ячейке

+0

Изменилось ли количество элементов в 'B'? Например, 'A. * cell2mat (B)' дает то, что вы хотите? –

ответ

2

Вот несколько способов, чтобы умножать, как вы описали:

% inputs 
A = [1,2,3]; 
B = {[1,2,3],[1,2,5],[1,2,6]}; 

используя для цикла:

C1 = cell(size(B)); 
for i=1:numel(C1) 
    C1{i} = A(i) * B{i}; 
end 

использованием cellfun:

C2 = cellfun(@(a,b)a*b, num2cell(A), B, 'Uniform',false); 

с помощью bsxfun:

C3 = bsxfun(@times, A(:), cat(1,B{:})); 
C3 = num2cell(C3,2)'; 

Все результаты должны быть равны (выход является массив ячеек):

assert(isequal(C1,C2,C3)) 

Если бы мне пришлось выбирать, я бы придерживаться для петли. В этом случае это, скорее всего, быстрее и проще читать.

Смежные вопросы