L2 范数的 Matlab 计算非常慢
Matlab computation of L2 norm is very slow
我有以下 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.
>>
我的问题是,为什么 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)
这完全没有意义。感谢您的帮助!
我邀请您阅读documentation for norm
。始终阅读函数的文档而不是对其功能做出假设是个好主意。简而言之,对于矩阵输入,norm
计算矩阵范数:
norm(R,1)
是 R
. 的最大绝对列总和
norm(R,Inf)
是 R
. 的最大绝对行总和
norm(R,2)
大约是 max(svd(R))
.
矩阵的 1 范数和无穷范数以类似的方式计算,因此预计成本相似。计算行或列的总和以及结果的最大值非常便宜。
相比之下,矩阵的 2 范数需要奇异值分解,这明显更昂贵。
在 Julia 中,norm
计算向量范数。要计算矩阵范数,请使用 opnorm
.
要在 MATLAB 中计算矩阵的行或列的向量范数,请使用 vecnorm
(自 R2017b 起)。要计算向量化矩阵的范数,请使用 norm(R(:))
.
PS:真正的问题是为什么 Julia 中的无穷范数这么慢?应该比1范数便宜,比2范数便宜很多!
我有以下 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.
>>
我的问题是,为什么 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)
这完全没有意义。感谢您的帮助!
我邀请您阅读documentation for norm
。始终阅读函数的文档而不是对其功能做出假设是个好主意。简而言之,对于矩阵输入,norm
计算矩阵范数:
norm(R,1)
是R
. 的最大绝对列总和
norm(R,Inf)
是R
. 的最大绝对行总和
norm(R,2)
大约是max(svd(R))
.
矩阵的 1 范数和无穷范数以类似的方式计算,因此预计成本相似。计算行或列的总和以及结果的最大值非常便宜。
相比之下,矩阵的 2 范数需要奇异值分解,这明显更昂贵。
在 Julia 中,norm
计算向量范数。要计算矩阵范数,请使用 opnorm
.
要在 MATLAB 中计算矩阵的行或列的向量范数,请使用 vecnorm
(自 R2017b 起)。要计算向量化矩阵的范数,请使用 norm(R(:))
.
PS:真正的问题是为什么 Julia 中的无穷范数这么慢?应该比1范数便宜,比2范数便宜很多!