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
.