Matlab calcul de la norme L2 est très lent

0

La question

J'ai le texte suivant MATLAB extrait:

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

Ma question est, pourquoi la norme L2 de calcul beaucoup plus lente que la L1 ou L infini norme? C'est une matrice aléatoire des fins de test, bien sûr, mais pour la matrice dans mon travail, je peux voir une tendance similaire en termes de temps écoulé.

Cependant, sur Julia, les résultats sont comme suit

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)

Cela n'a aucun sens. Toute aide est appréciée!

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

La meilleure réponse

11

Je vous invite à lire la documentation pour norm. Il est toujours une bonne idée de lire la documentation d'une fonction et de ne pas faire des hypothèses sur ce qu'il fait. Bref, avec une matrice d'entrée, norm calcule la matrice norme:

  1. norm(R,1) est le maximum absolu de la colonne somme de R.
  2. norm(R,Inf) est le maximum absolu de la ligne de la somme de R.
  3. norm(R,2) est d'environ max(svd(R)).

Le 1-norme et de l'infini-la norme de la matrice sont calculés de manière similaire, et devraient donc être similaires dans le coût. Le calcul de la somme sur les lignes ou les colonnes, et le max de la suite, est assez bon marché.

Le 2-norme de la matrice, en revanche nécessite une décomposition en valeurs singulières, ce qui est nettement plus cher.

Dans Julia, norm calcule le vecteur de norme. Pour calculer une matrice de norme, de l'utilisation opnorm.

Pour calculer le vecteur de norme de lignes ou de colonnes d'une matrice dans MATLAB, l'utilisation vecnorm (depuis R2017b). Pour calculer la norme de la vectorisé de la matrice, utilisation norm(R(:)).


PS: La vraie question est: pourquoi est-l'infini-norme en Julia-elle si lente? Il devrait être moins cher que le 1-norme et beaucoup moins cher que le 2-norme!

2021-11-22 16:12:19

À l'aide de BenchmarkTools comme @ColinTBowers points, le temps sont les suivants: 1-norm=17ms, 2-norm=23m, inf-norm=29ms. Donc, il n'est pas aussi crûment lent que le temps de la question. Quant à savoir pourquoi il n'est pas plus rapide, il ressemble 1-norme et 2-norme d'appel spécialisé BLAS méthodes, tandis que d'inf-norme n'a qu'un générique Julia de mise en œuvre.
Sundar R

Fait intéressant, l'Infinité de la norme est de 2,3 x plus lent que évident maximum(abs, R).
Oscar Smith

Oscar Smith

Dans d'autres langues

Cette page est dans d'autres langues

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