Matlab cálculo de L2 norma é muito lento

0

Pergunta

Eu tenho o seguinte MATLAB trecho:

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

A minha pergunta é, por que a norma L2 de cálculo será muito mais lenta do que a L1 ou L infinito norma? Esta é uma matriz aleatória para fins de teste, é claro, mas para a própria matriz no meu trabalho eu posso ver um padrão semelhante, em termos de tempo decorrido.

No entanto, em Julia, os resultados são como segue

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)

Isso não faz nenhum sentido. Qualquer ajuda é apreciada!

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

Melhor resposta

11

Convido você a ler a documentação para norm. É uma boa idéia sempre ler a documentação para uma função e não fazer suposições sobre o que ele faz. Em suma, com uma matriz de entrada, norm calcula a matriz de norma:

  1. norm(R,1) é o máximo absoluto da coluna soma de R.
  2. norm(R,Inf) é o máximo absoluto linha soma de R.
  3. norm(R,2) é, aproximadamente, max(svd(R)).

1-a norma e o infinito-a norma da matriz são calculados de forma semelhante, e, por isso, devem ser semelhantes em custo. Calcular a soma ao longo de linhas ou colunas, e o máximo de resultado, é muito barato.

2-a norma da matriz em contraste requer uma decomposição em valores singulares, o que é significativamente mais caro.

Em Julia, norm calcula o vetor de norma. Para calcular uma matriz de norma, uso opnorm.

Para calcular o vetor de norma de linhas ou colunas de uma matriz no MATLAB, use vecnorm (desde R2017b). Para calcular a norma de vetorizados matriz, use norm(R(:)).


PS: A verdadeira questão é qual é o infinito-norma Julia tão lento? Deve ser mais barato do que o 1-norm e muito mais barato do que o 2-norma!

2021-11-22 16:12:19

Usando BenchmarkTools como @ColinTBowers aponta, os tempos são: 1-norm=17ms, 2-norma=23ms, inf-norma=29ms. Portanto, não é absolutamente lento como os times em questão. Como para, porque ele não é mais rápido, parece que 1-a norma e a 2-norma chamada especializada BLAS métodos, considerando que o inf-norma só tem um genérico Julia implementação.
Sundar R

Curiosamente, o Infinito norma é de 2,3 x mais lento do que o óbvio maximum(abs, R).
Oscar Smith

Oscar Smith

Em outros idiomas

Esta página está em outros idiomas

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