MATLAB: поэлементное умножение двух матриц по одному индексу?
Я пытаюсь выяснить, есть ли нативный способ получения определенного вида поэлементного произведения двух матриц в Matlab.
Продукт, который я ищу, занимает две матрицы, A
а также B
скажи и верни туда товар C
чьи элементы задаются
C(i,j,k) = A(i,j)*B(j,k)
Естественно, количество столбцов A
Предполагается, будет равно количеству строк B
,
Прямо сейчас я использую следующий цикл for (при условии, size(A,2)==size(B,1)
правда). Сначала я инициализирую C
:
C = zeros(size(A,1), size(A,2), size(B,2));
А затем я выполняю поэлементное умножение с помощью:
for i=1:size(A,2)
C(:,i,:) = A(:,i)*B(i,:);
end
Итак, мой вопрос: есть ли в Matlab родной путь к подобным вещам?
1 ответ
Решение
Вам нужно "сдвинуть" первые два измерения B во второе и третье измерения соответственно с permute
а затем использоватьbsxfun
с@times
возможность работать на A
и сдвинутая версия измерения B
-
C = bsxfun(@times,A,permute(B,[3 1 2]))