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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top