我有以下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)
这完全没有意义。任何帮助都是非常感谢的!
发布于 2021-11-22 03:42:29
我邀请你读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:真正的问题是,为什么朱莉娅的无限范数如此缓慢?它应该比1-范数便宜得多,比2-范数便宜得多!
https://stackoverflow.com/questions/70060566
复制相似问题