在David Lay的线性代数中,他问两种矩阵计算方式中的哪一种更快:
A*(A*x)
或(A*A)*x
其中A
是n
x n
矩阵,x
是n
x 1
向量(矩阵产品定义明确。)
我做了一个matlab程序,并为自己看到了更高的尺寸,我深信不疑。但我也尝试了n = 1的情况,在这种情况下,奇怪的是选项1仍然比选项2快,但事实并非如此。
有人知道为什么n = 1的情况会更快出现吗?
虽然稍微快一些答案 0 :(得分:1)
对于n=1
情况,A
和x
都是标量,因此两个操作都包含两个标量乘法。操作应该花费几微秒(或更短),并且可能比计时器的分辨率更快。问题更关注n
的更大(更现实)的价值。
答案 1 :(得分:0)
确定。弄清楚了。平均而言,计算时间是一样的。我的代码中出现了逻辑错误。现在,如果更快在一次运行中显示更少的时间(这本身就是整体平均值),那么在下一次运行中它比另一次运行慢。这是matlab代码:
close all
clc
clear all
n=1
for j=1:100
tic
for i=1:100
a=round(10*rand(n,n));
x=round(10*rand(n,1));
(a*a)*x;
end
d=toc;
f(j)=d*1e3;
end
for j=1:100
tic
for i=1:100
a=round(10*rand(n,n));
x=round(10*rand(n,1));
(a)*(a*x);
end
e=toc;
t(j)=e*1e3;
end
slower=mean(f)
faster=mean(t)
plot(1:100,f)
hold on
plot(1:100,t,'r')
legend('slower','faster')