vacio recorrer matrices llenar for create array arrays matlab matrix vectorization normalization

arrays - recorrer - Norma vectorial de un conjunto de vectores en MATLAB.



vector matlab (4)

A partir de la versión 2017b, puede utilizar vecnorm .

Cuando se llama norm en una matriz en MATLAB, devuelve lo que se conoce como una "norma matriz" (un valor escalar), en lugar de una serie de normas vectoriales. ¿Hay alguna manera de obtener la norma de cada vector en una matriz sin hacer un bucle y aprovechar la vectorización de MATLAB?


La implementación existente para las dos normas puede ser mejorada.

twoNorm = sqrt(sum(abs(M).^2,1)); # The two-norm of each column

abs(M).^2 va a estar calculando un montón de raíces cuadradas innecesarias que se cuadran de inmediato.

Mucho mejor que hacer:

twoNorm = sqrt( sum( real(M .* conj(M)), 1 ) )

Esto maneja eficientemente la m real y compleja.

El uso de real() garantiza que la sum y el sqrt actúen sobre números reales (en lugar de números complejos con 0 componentes imaginarios).


Ligera adición a la respuesta de P i :

norm_2 = @(A,dim)sqrt( sum( real(A).*conj(A) , dim) )

permite para

B=magic([2,3]) norm_2( B , 1) norm_2( B , 2)

o como este si quieres un archivo norm_2.m:

function norm_2__ = norm_2 (A_,dim_) norm_2__ = sqrt( sum( real(A_).*conj(A_) , dim_) ) ; end


Usted mismo puede calcular la norma de cada columna o fila de una matriz mediante el uso de operadores aritméticos de elementos y funciones definidas para operar sobre dimensiones de matriz determinadas (como SUM y MAX ). Aquí le mostramos cómo puede calcular algunas normas de columnas para una matriz M :

twoNorm = sqrt(sum(abs(M).^2,1)); %# The two-norm of each column pNorm = sum(abs(M).^p,1).^(1/p); %# The p-norm of each column (define p first) infNorm = max(M,[],1); %# The infinity norm (max value) of each column

Estas normas pueden hacerse fácilmente para operar en las filas en lugar de las columnas cambiando los argumentos de dimensión de ...,1 a ...,2 .