Предположим, у меня есть 2 вектора, и я хочу сделать внешний продукт. Я мог бы использовать:Дозирующие наружные изделия с bsxfun
A=x*y';
Или я мог бы использовать bsxfun
вроде:
bsxfun(@times,x,y')
Но я хочу пакетные внешние продукты. У меня есть 2 матрицы, каждый имеет p
векторов:
n=1000; p=6;
A=rand(n,p);
D=rand(n,p);
И я хочу, чтобы вычислить все внешние продукты и просуммировать результаты, как так:
AA=zeros(n,n);
for j=1:p
AA = AA + A(:,j) * D(:,j).';
end
я хочу более эффективно делать это, но я могу Нет.
Вы ищете решение, в котором вы комбинируете 'bsxfun' с' permute'. – Adriaan
'C = bsxfun (@ times, A, permute (D. ', [3 1 2]));' дает мне «1000x6x1000» за очень короткое время, хотя я не уверен, что это правильный результат. – Adriaan
результат должен быть 1000x1000 – alonhzn