我有以下 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)
這完全沒有意義。任何幫助表示贊賞!
uj5u.com熱心網友回復:
我請你閱讀的檔案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-norm 便宜,比 2-norm 便宜得多!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/363397.html
