2010-02-20 3 views
13

Octave peut-il calculer et stocker uniquement la diagonale d'un produit matriciel?Comment calculer uniquement la diagonale d'un produit matriciel dans Octave?

Fondamentalement comme faire: vector = diag(A*B);

Je ne me soucie pas de l'une des valeurs de A*B sauf celles sur la diagonale. Les tailles de la matrice sont autour de 80k x 12 et 12 x 80k, donc même si je me fichais de la vitesse/de la mémoire supplémentaire, elle ne rentrerait pas dans la RAM. Etrange, puisque Octave est un paquet pour les ensembles de données énormes et les diagonales sont très importants, donc cela devrait être possible.

Répondre

17

Le premier élément de la diagonale est le produit scalaire de la première rangée de A avec la première colonne de B. Le deuxième élément de la diagonale est le produit scalaire de la deuxième rangée de A avec la deuxième colonne de B.

en d'autres termes:

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

Je vois que vous avez fait bon usage de la période de grâce de 5 minutes pour l'édition. ;) – gnovice

+0

Je suis content que la période de grâce existe. J'ai l'impression de ne voir que mes erreurs majeures une fois que je me suis soumis. :) – Jonas

9

Voici comment vous pouvez le faire en Matlab (probablement similaire à la syntaxe Octave):

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

Cela calculer seulement la diagonale résultante de l'opération A*B en tant que vecteur de colonne vector.

0

fait je pense qu'il est le produit scalaire de la première rangée de A avec la première colonne de B ... le deuxième élément diagonal est le produit scalaire de la deuxième rangée et la seconde colonne etc ...

+0

Oui. J'ai mal saisi. – Jonas

Questions connexes