Matlab cálculo de L2 norma es muy lento

0

Pregunta

Tengo el siguiente fragmento de 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.
>> 

Mi pregunta es, ¿por qué el L2 norma de cálculo de ser mucho más lento que el de la L1 o L infinito norma? Esta es una matriz aleatoria para propósitos de prueba, por supuesto, pero para el real de la matriz, en mi trabajo, puedo ver un patrón similar en términos del tiempo transcurrido.

Sin embargo, en Julia, los resultados son como sigue

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)

Esto no tiene ningún sentido en absoluto. Cualquier ayuda es muy apreciada.

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

Mejor respuesta

11

Los invito a leer la documentación para norm. Es una buena idea siempre lea la documentación para una función y no hacer suposiciones acerca de lo que hace. En resumen, con una matriz de entrada, norm calcula la matriz de la norma:

  1. norm(R,1) es el máximo absoluto de la suma de la columna de R.
  2. norm(R,Inf) es el máximo absoluto de fila suma de R.
  3. norm(R,2) es de aproximadamente max(svd(R)).

El 1-norma y el infinito-la norma de la matriz se calculan en forma similar, y se espera que sea similar en costo. El cómputo de la suma de las filas o columnas, y el max de el resultado, es bastante barato.

La 2-norma de la matriz, en cambio, requiere una descomposición de valor singular, que es significativamente más caro.

En Julia, norm calcula el vector de norma. Para calcular la matriz de la norma, el uso de opnorm.

Para calcular el vector de norma de filas o columnas de una matriz en MATLAB, el uso de vecnorm (desde R2017b). Para el cálculo de la norma de la vectorizados de la matriz, uso norm(R(:)).


PS: La verdadera pregunta es ¿por qué es el infinito de la norma en Julia tan lento? Debería ser más barato que el 1-norma y mucho más barato que la 2-norma!

2021-11-22 16:12:19

El uso de BenchmarkTools como @ColinTBowers señala, los horarios son: 1-norm=17ms, 2-norm=23ms, inf-norm=29ms. Así que no es tan marcadamente lento como los tiempos en la pregunta. En cuanto a por qué no es más rápido, se ve como 1-norma y 2-norma llamada especializados BLAS métodos, mientras que el inf-norma sólo tiene un genérico Julia aplicación.
Sundar R

Curiosamente, el Infinito norma es de 2,3 x más lento de lo obvio maximum(abs, R).
Oscar Smith

Oscar Smith

En otros idiomas

Esta página está en otros idiomas

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