2010-02-20 11 views
13

¿Hay alguna forma en Octave para calcular y almacenar solo la diagonal de un producto de matriz?¿Cómo calcular solo la diagonal de un producto de matriz en Octave?

Básicamente como hacer: vector = diag(A*B);

No me importa acerca de cualquiera de los valores de A*B excepto los de la diagonal. Los tamaños de matriz son alrededor de 80k x 12 y 12 x 80k, por lo que incluso si no me importa la velocidad/memoria extra, simplemente no cabe en la memoria 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.

Respuesta

17

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); 
+1

Veo que hizo un buen uso del período de gracia de 5 minutos para editar. ;) – gnovice

+0

Me alegra que exista el período de gracia. Parece que solo veo mis principales errores una vez que presiono enviar. :) – Jonas

9

Esta es la forma en que podría hacerlo en MATLAB (probablemente similar a la sintaxis de octava):

vector = sum(A.*B',2); 

Este computará únicamente la diagonal resultante de la operación A*B como vector de columna vector.

0

en realidad creo que es el producto escalar de la primera fila de A con la columna de la primera de B ... el segundo elemento de la diagonal es el producto escalar de la segunda fila y la segunda columna ... etc

+0

Sí. Yo escribí mal – Jonas

Cuestiones relacionadas