Matlab výpočet L2 norma je velmi pomalý

0

Otázka

Mám následující MATLAB úryvek:

>> 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.
>> 

Moje otázka je, proč by L2 norma výpočtu bude mnohem pomalejší než L1 nebo L nekonečno norma? To je náhodné matice pro účely testování, samozřejmě, ale za skutečný matrix v mé práci vidím podobný vzor z hlediska uplynulého času.

Nicméně, na Julii, výsledky jsou následující

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)

To nedává žádný smysl vůbec. Každá pomoc je vítána!

julia linear-algebra matlab matrix
2021-11-22 03:23:36
1

Nejlepší odpověď

11

Zvu vás ke čtení dokumentace norm. Je to dobrý nápad, aby se vždy přečíst dokumentaci k funkci a ne dělat předpoklady o tom, co to dělá. Stručně řečeno, matrix vstup, norm vypočítá matice norma:

  1. norm(R,1) je maximální absolutní sloupec součtu R.
  2. norm(R,Inf) je maximální absolutní řádek součet R.
  3. norm(R,2) je přibližně max(svd(R)).

1-norma a nekonečno-norma matice jsou počítány podobným způsobem, a proto se očekává, že bude podobné v ceně. Výpočet součtu přes řádky nebo sloupce, a max výsledku, je poměrně levné.

2-norma matice v kontrastu vyžaduje singulární rozklad, který je výrazně dražší.

V Julia, norm vypočítá vektor normou. Pro výpočet matice normy, použití opnorm.

Pro výpočet vektoru, norma řádky nebo sloupce matice v MATLABU, použití vecnorm (od R2017b). Pro výpočet normy vectorized matice, použití norm(R(:)).


PS: otázkou je, proč je nekonečno-norma v Julii tak pomalu? To by mělo být levnější než 1-norma a mnohem levnější, než 2-norma!

2021-11-22 16:12:19

Pomocí BenchmarkTools stejně jako @ColinTBowers poukazuje na to, časy jsou: 1-norma=17ms, 2-norm=23ms, inf-norma=29ms. Takže to není tak ostře pomalé časy v otázce. Jako proč to není rychlejší, vypadá to, že 1-standard a 2-norma zavolat specializované BLAS metody, vzhledem k tomu, inf-norma má pouze obecný Julia provádění.
Sundar R

Zajímavé je, že Nekonečno norma je 2,3 x pomalejší než zřejmé maximum(abs, R).
Oscar Smith

github.com/JuliaLang/julia/pull/43190 tento problém řeší.
Oscar Smith

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................