Al llamar a norm
en una matriz en MATLAB, devuelve lo que se conoce como "norma matriz" (un valor escalar), en lugar de una matriz de normas vectoriales. ¿Hay alguna forma de obtener la norma de cada vector en una matriz sin bucle y aprovechando la vectorización de MATLAB?Norma vectorial de una matriz de vectores en MATLAB
Respuesta
Puede calcular la norma de cada columna o fila de una matriz usando element-wise arithmetic operators y funciones definidas para operar sobre dimensiones de matrices determinadas (como SUM y MAX). Así es como se podría calcular algunas normas por columnas de 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 se pueden hacer fácilmente para funcionar en las filas en lugar de las columnas cambiando los argumentos dimensión de ...,1
a ...,2
.
tal vez debería especificar explícitamente las dimensiones a lo largo de las cuales funcionan SUM y MAX, de esa manera sería más fácil cambiar a normas de filas ... – Amro
@Amro: Buena sugerencia. ¡Hecho! – gnovice
Si 'M' solo consta de números reales, puede reemplazar' abs (M) 'con' M' en 'twoNorm' ya que'.^2' cancela efectivamente cualquier signo negativo. – kroimon
Se puede mejorar la implementación existente para las dos normas.
twoNorm = sqrt(sum(abs(M).^2,1)); # The two-norm of each column
abs(M).^2
se va a calcular un montón de raíces cuadradas innecesarios que acaba de obtener de inmediato al cuadrado.
mucho mejor hacer:
twoNorm = sqrt(
sum(real(M .* conj(M)), 1)
)
Este gestiona de manera eficaz real y complejo M.
Usando real()
asegura que sum
sqrt
y actúan sobre los números reales (en lugar de los números complejos con 0 componente imaginario).
A partir de la versión 2017b, puede usar vecnorm.
- 1. Generando vectores en MATLAB
- 2. Inicializar una matriz vectorial de cadenas
- 3. Creciendo un Hashmap de vectores en Matlab
- 4. Cómo dibujar vectores (vectores 2D/3D físicos) en MATLAB?
- 5. Boost uBLAS matriz/producto vectorial
- 6. Dividir una matriz en MATLAB
- 7. ¿Cómo creo una matriz de valores regularmente espaciados en MATLAB?
- 8. MATLAB: indice una matriz de celdas con una matriz de celdas de matrices y devuelve una matriz de celdas
- 9. Agrupamiento de espacio vectorial enorme
- 10. producto vectorial de un vector en NumPy
- 11. ¿Norma eficiente en Java?
- 12. Producir matriz 2D de una matriz 1D en MATLAB
- 13. 'Matriz de matrices' en matlab?
- 14. Paralelización una operación vectorial Numpy
- 15. matriz en MATLAB
- 16. ¿Multiplicación vectorial vector-elemento en BLAS?
- 17. reserva vectorial C++
- 18. Matlab: ¿forma fácil de obtener los vectores de base estándar?
- 19. Rotar una matriz 3D en MATLAB
- 20. ¿Cómo se muestra una matriz en MATLAB?
- 21. multiplicar numpy matriz de escalares por matriz de vectores
- 22. ¿Cómo resolver una matriz en MATLAB?
- 23. creación de matriz numpy con una secuencia
- 24. Vector de vectores para crear la matriz
- 25. C vectorial ++ acumula
- 26. Pasar una matriz de vectores a un uniforme
- 27. Matriz de Python a MATLAB
- 28. inicializar MATLAB matriz de objetos
- 29. Obtiene la norma 1 de un vector en Python
- 30. ¿Matriz de longitud desconocida en MATLAB?
¿qué tal la suma? –