gpt4 book ai didi

matlab - 在Matlab中只计算矩阵乘积的对角线

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

在 Matlab 中是否有一种有效的方法来仅计算 3 个(或更多)矩阵乘积的对角线?具体我想要

diag(A'*B*A)

当 A 和 B 都非常大时,可能需要很长时间。如果只有两个矩阵

diag(B*A)

然后我可以这样快速完成:

sum(B.*A',2)

所以现在我用 3 个这样的矩阵计算对角线:

C = B*A;
ans = sum(A'.*C',2);

这很有帮助,但第一个操作(C = B*A)仍然需要很长时间。整个过程也必须重复多次,导致运行我的代码需要数周时间。例如,B 约为 15k x 15k,A 约为 32k x 15k。没有什么是稀疏的。

最佳答案

首先,欢迎您!老实说,这似乎很难。一点点改变至少会稍微提高速度:

N = 5000;
A = rand(N,N*2);
B = rand(N,N);

t = cputime;
diag(A'*B*A);
disp(['Elapsed cputime ' num2str(cputime-t)]);

t=cputime;
C = B*A;
sum(A'.*C',2);
disp(['Elapsed cputime ' num2str(cputime-t)]);

% slightly better...
t=cputime;
C = B*A;
sum(A.*C)';
disp(['Elapsed cputime ' num2str(cputime-t)]);

% slightly better than slightly better...
t=cputime;
sum(A.*(B*A))';
disp(['Elapsed cputime ' num2str(cputime-t)]);

结果:

Elapsed cputime 82.2593
Elapsed cputime 28.6106
Elapsed cputime 25.8338
Elapsed cputime 25.7714

关于matlab - 在Matlab中只计算矩阵乘积的对角线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23903021/

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