¿Cómo calcular solo la diagonal de un producto de matriz en octava?
-
21-09-2019 - |
Pregunta
¿Hay alguna manera en octava para calcular y almacenar solo la diagonal de un producto de matriz?
Básicamente me gusta hacer: vector = diag(A*B);
No me importan ninguno de los valores de A*B
excepto los de la diagonal. Los tamaños de matriz están alrededor 80k x 12
y 12 x 80k
, entonces, incluso si no me importaba la velocidad/memoria adicional, simplemente no cabe en RAM.
Extraño, ya que Octave es un paquete para grandes conjuntos de datos y las diagonales son muy importantes, por lo que debería ser posible.
Solución
El primer elemento en la diagonal es el producto escalar de la primera fila de A con la primera columna de B. El segundo elemento en la diagonal es el producto escalar de la segunda fila de A con la segunda columna de B.
En otras palabras:
vector = sum(A.*B',2);
Otros consejos
Así es como podrías hacerlo en Matlab (probablemente similar a la sintaxis de octava):
vector = sum(A.*B',2);
Esto calculará solo la diagonal resultante de la operación A*B
Como vector de columna vector
.
en realidad creo que es el producto de puntos de la primera fila de A con la primera columna de B ... El segundo elemento diagonal es el producto DOT de la segunda fila y la segunda columna ... etc.