gpt4 book ai didi

matlab - 我可以在 Matlab 中快速执行以下操作吗?

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:12 26 4
gpt4 key购买 nike

我在 Matlab 中有三个矩阵,A 是 n x m,B 是 p x m,C 是 r x n。

假设我们使用以下方法初始化一些矩阵:

    A = rand(3,4);
B = rand(2,3);
C = rand(5,4);

下面两个是等价的:

 >> s=0; 
>> for i=1:3
for j=1:4
s = s + A(i,j)*B(:,i)*C(:,j)';
end;
end
>> s

s =

2.6823 2.2440 3.5056 2.0856 2.1551
2.0656 1.7310 2.6550 1.5767 1.6457


>> B*A*C'

ans =

2.6823 2.2440 3.5056 2.0856 2.1551
2.0656 1.7310 2.6550 1.5767 1.6457

后者效率更高。

对于以下循环变体,我找不到任何有效的版本:

 s=0; 
for i=1:3
for j=1:4
x = A(i,j)*B(:,i)*C(:,j)';
s = s + x/sum(sum(x));
end;
end

在这里,添加的矩阵在每一步之后通过它们的值的总和进行归一化。

有什么想法可以使它像上面的矩阵乘法一样高效吗?我想也许 accumarray 可以提供帮助,但不确定如何。

最佳答案

您可以使用 bsxfun 高效地做到这一点:

aux1 = bsxfun(@times, permute(B,[1 3 2]), permute(C,[3 1 4 2]));
aux2 = sum(sum(aux1,1),2);
s = sum(sum(bsxfun(@rdivide, aux1, aux2),3),4);

请注意,由于规范化,结果独立于 A,假设它不包含任何零条目(如果包含则结果未定义)。

关于matlab - 我可以在 Matlab 中快速执行以下操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19730763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com