2013-09-23 3 views
2

У меня есть две матрицы A и B, оба размера 4x4. умножить первый столбец A со всеми остальными столбцами B с:Умножить все столбцы одной матрицы на другую матрицу с помощью bsxfun

bsxfun(@times, A(:,1),B) 

но то, что я хочу сделать, это повторить эту операцию для каждого столбца A, т.е. умножить все столбцы A все колонны от B. Как это сделать с помощью bsxfun (без петель или repmat)?

+3

'bsxfun' так весело! – Shai

ответ

4

Да, permuting размеры одной из матриц, чтобы сделать его массив 4x1x4:

permute(bsxfun(@times, A, permute(B, [1 3 2])), [1 3 2]) 
+2

+1, но кажется, что ваши изменения производят сдвинутый результат. Я исправил ваш ответ! –

+0

@EitanT Спасибо! –

+0

Спасибо за ответы и за редактирование. –

0

В качестве альтернативы:

>> n = size(A, 1); 
>> res = arrayfun(@(x) A(:, x) * ones(1, n) .* B, 1 : n, 'UniformOutput', false) 

res = 

    [4x4 double] [4x4 double] [4x4 double] [4x4 double] 

Замечание: в Matlab "размножаться" по умолчанию означает, что матрица умножение, которое было бы просто res = A' * B. То, что вы попросили, - это умножение элемента.

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

  • Нет связанных вопросов^_^