Matlab中min(A,[],'all')与min(A(:))哪个执行效率更高?
Matlab中
min(A,[],'all')与min(A(:))的效率对比 针对200×200的矩阵A,两种求全局最小值的写法中,min(A(:))的执行效率更高——这和很多人“A(:)展开矩阵会带来额外开销,min(A,[],'all')应该更快”的直觉相反,以下结合测试代码和逻辑来解释:
测试代码
rng(1) res=rand(200,200); timeitn= 100; % 可调整为更大数值提升测试稳定性 tic for i=1:timeitn min(res,[],"all"); end toc tic for i=1:timeitn min(res(:)); end toc
测试结果
根据实际运行结果,min(res,[],"all")的耗时约0.0016秒,min(res(:))的耗时约0.0008秒,后者速度接近前者的2倍。
原因解释
A(:)并非真正复制数据:Matlab的数组在内存中是按列优先连续存储的,A(:)只是创建了一个指向原矩阵内存的“视图”(引用),并没有生成新的展开数组,几乎没有额外内存开销和复制成本。min(A,[],'all')的额外逻辑开销:这种写法需要处理多维数组的维度遍历逻辑,底层实现中可能包含更多分支判断或维度适配代码,相比直接对一维“视图”调用min,多了一层维度处理的开销。- 版本优化差异:不同版本的Matlab对两种写法的优化程度可能不同,但在多数常用版本中,针对一维数组的
min函数经过了更充分的底层优化,执行效率更高。
内容的提问来源于stack exchange,提问作者Jerry Chou
相关产品推荐
相关产品推荐

