gou*_*aha 4 performance matlab matrix linear-algebra julia
我有以下 MATLAB 片段:
>> R = randn(3000,6000); % build a random 3000 by 6000 matrix
>> tic; norm(R, 1); toc;
Elapsed time is 0.005586 seconds.
>> tic; norm(R, 2); toc;
Elapsed time is 3.019667 seconds.
>> tic; norm(R, inf); toc;
Elapsed time is 0.005393 seconds.
>>
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么 L2 范数计算比 L1 或 L 无穷范数慢得多?当然,这是一个用于测试目的的随机矩阵,但对于我工作中的实际矩阵,我可以在经过的时间方面看到类似的模式。
然而在Julia上,结果如下
julia> @time norm(R, 1);
0.007156 seconds (1 allocation: 16 bytes)
julia> @time norm(R, 2);
0.009142 seconds (1 allocation: 16 bytes)
julia> @time norm(R, Inf);
0.034633 seconds (1 allocation: 16 bytes)
Run Code Online (Sandbox Code Playgroud)
这完全没有意义。任何帮助表示赞赏!
Cri*_*ngo 11
我邀请您阅读的文档norm。最好始终阅读函数的文档,而不是对其功能做出假设。简而言之,使用矩阵输入norm计算矩阵范数:
norm(R,1)是 的最大绝对列和R。norm(R,Inf)是 的最大绝对行和R。norm(R,2)大约是max(svd(R)).矩阵的 1-范数和无穷大范数以类似的方式计算,因此预计成本相似。计算行或列的总和以及结果的最大值非常便宜。
相比之下,矩阵的 2-范数需要奇异值分解,这要昂贵得多。
在 Julia 中,norm计算向量范数。要计算矩阵范数,请使用opnorm。
要在 MATLAB 中计算矩阵的行或列的向量范数,请使用vecnorm(since R2017b)。要计算矢量化矩阵的范数,请使用norm(R(:))。
PS:真正的问题是为什么 Julia 中的无穷范数这么慢?应该比1范数便宜,比2范数便宜很多!
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |