【发布时间】:2023-03-27 05:23:01
【问题描述】:
我没有足够的内存来简单地创建一个对角 D-by-D 矩阵,因为 D 很大。我不断收到“内存不足”错误。
我没有在第一次乘法中执行 M x D x D 运算,而是执行 M x D 运算,但我的代码仍然需要很长时间才能运行。
谁能找到更有效的方法来执行乘法A'*B*A?到目前为止,这是我尝试过的:
D=20000
M=25
A = floor(rand(D,M)*10);
B = floor(rand(1,D)*10);
for i=1:D
for j=1:M
result(i,j) = A(i,j) * B(1,j);
end
end
manual = result * A';
auto = A*diag(B)*A';
isequal(manual,auto)
【问题讨论】:
-
我很困惑。矩阵 B 应该是 D-by-D 还是 M-by-M?您的图片显示的是前者,但您的代码显示的是后者。
-
另外,您是否尝试计算 A'BA,这会给您一个 M×M 结果?
-
是的,这就是我想要实现的目标
标签: algorithm matlab linear-algebra octave matrix-multiplication