2010-02-20 7 views
13

Esiste un modo in Octave per calcolare e memorizzare solo la diagonale di un prodotto matrice?Come calcolare solo la diagonale di un prodotto matrice in Octave?

Fondamentalmente come fare: vector = diag(A*B);

Non mi importa niente dei valori di A*B ad eccezione di quelli sulla diagonale. Le dimensioni della matrice sono intorno a 80k x 12 e 12 x 80k, quindi anche se non mi interessa la velocità/memoria extra semplicemente non si adatta alla RAM.

Strano, dal momento che Octave è un pacchetto per enormi set di dati e diagonali sono molto importanti, quindi dovrebbe essere possibile.

risposta

17

Il primo elemento nella diagonale è il prodotto scalare della prima riga di A con la prima colonna di B. Il secondo elemento nella diagonale è il prodotto scalare della seconda riga di A con la seconda colonna di B.

in altre parole:

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

Vedo che hai fatto buon uso del periodo di tolleranza di 5 minuti per la modifica. ;) – gnovice

+0

Sono contento che il periodo di grazia esista. Mi sembra di vedere solo i miei errori più importanti una volta che ho premuto submit. :) – Jonas

9

questo è come si potrebbe fare in MATLAB (probabilmente simile a sintassi Octave):

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

consente di calcolare solo la diagonale risultante dell'operazione A*B come vettore colonna vector.

0

realtà credo sia il prodotto scalare della prima riga di A con il primo colonna di B ... secondo elemento diagonale è il prodotto scalare della seconda riga e la seconda colonna ... ecc

+0

Sì. Ho sbagliato a scrivere – Jonas