在matlab中,哪个效率更高,
min(A,[],"all")
还是min(A(:))
?
A 是一个 200x200 矩阵。我的第一个想法是
min(A,[],"all")
应该更快。因为 A(:)
会扩展矩阵。有谁可以解释这些结果吗?
代码如下:
rng(1)
res=rand(200,200);
timeitn= 100; %10000000
tic
for i=1:timeitn
min(res,[],"all");
end
toc
tic
for i=1:timeitn
min(res(:));
end
toc
您测量的近半秒的时间差异可能是由测量过程中计算机中发生的其他事情引起的。使用
timeit
进行更精确的时间测量。
或者,这可能是由于在第一种情况下解释
([],"all")
所必需的更广泛的输入参数验证引起的。
无论哪种方式,我都不认为这两种形式的成本有显着差异。操作
A(:)
本质上是免费的,因为不复制任何数据。此操作只是创建一个大小不同的新数组,该数组指向与 A
相同的数据。