Matlabu výpočtu L2 norma je veľmi pomalý

0

Otázka

Mám tieto MATLABU úryvok:

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

Moja otázka je, prečo by L2 normy výpočtu sa, že oveľa pomalšie ako L1 alebo L infinity normy? Toto je náhodný matice pre účely testovania, samozrejme, ale pre skutočný matice v mojej práci môžem pozorovať podobný trend z hľadiska uplynulý čas.

Avšak, na Julia, výsledky sú nasledovné

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áva žiadny zmysel vôbec. Každá pomoc je ocenil!

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

Najlepšiu odpoveď

11

Pozývam vás, aby ste si prečítajte dokumentáciu pre norm. To je dobrý nápad, aby si vždy prečítajte dokumentáciu na funkciu a nie urobiť predpoklady o tom, čo robí. V skratke, s maticou vstup, norm vypočíta matice normy:

  1. norm(R,1) je maximálna absolútna stĺpci súčet R.
  2. norm(R,Inf) je maximálna absolútna riadok súčtu R.
  3. norm(R,2) je približne max(svd(R)).

1-normy a infinity-norma matice sa počítajú podobným spôsobom, a preto sa očakáva, že bude podobné v cene. Výpočet súčtu viac riadkov alebo stĺpcov, a max výsledku, je pomerne lacné.

2-norma matice na rozdiel vyžaduje singular value rozkladu, čo je podstatne drahšie.

V Julia, norm vypočíta vektor normy. Na výpočet matice normy, používať opnorm.

Na výpočet vektorové normy riadkov alebo stĺpcov matice v MATLABU, použitie vecnorm (od R2017b). Na výpočet normy vektorizované matice, použitie norm(R(:)).


PS: skutočná otázka je, prečo je infinity-norm v Julia tak pomaly? Malo by to byť lacnejšie ako 1-normy a oveľa lacnejšie ako 2-norm!

2021-11-22 16:12:19

Pomocou BenchmarkTools ako @ColinTBowers poukazuje na to, že časy sú: 1-norm=17ms, 2-norm=23ms, inf-norm=29ms. Takže to nie je tak ostro pomaly ako časy v otázke. Ako dôvod, prečo to nie je rýchlejšie, vyzerá to, že 1-normy a 2-norm hovor špecializované BLAS metódy, keďže inf-norm má len všeobecný Julia implementácie.
Sundar R

Zaujímavé je, že Infinity norma je 2.3 x pomalšie než zrejmé, že maximum(abs, R).
Oscar Smith

Oscar Smith

V iných jazykoch

Táto stránka je v iných jazykoch

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