2016-03-25 27 views
1

Ich habe eine dünne Matrix, die nur Elemente in drei Diagonalen hat. Z.B.Matlab effiziente spärliche Matrix Multiplikation

enter image description here

Ich habe auch einen Spaltenvektor, wo ich jedes Element in jeder Reihe der Sparse Matrix durch das entsprechende Element in jeder Zeile des Spaltenvektor multiplizieren soll. Gibt es eine effiziente Möglichkeit, dies in MATLAB zu tun? Wenn die spärliche Matrix A genannt und der Spaltenvektor B, habe ich versucht, nur

A.*repmat(B,[1,9]) 

die offensichtlich ineffizient ist.

+0

"jede Zeile des Spaltenvektors" ist nur ein Skalar. Machst du das? –

+0

@HennadiiMadan ja, aber keine Sorge, Amro-Lösung genau das, was ist, ich wurde :) –

Antwort

4

Hier ist eine Art und Weise:

C = bsxfun(@times, A, B) 

Nach docs, die resultierende Matrix C ist spärlich:

Binäre Operatoren spärlichen Ergebnissen führen, wenn beide Operanden sind spärlich, und die vollständigen Ergebnisse, wenn beide sind voll . Bei gemischten Operanden ist das Ergebnis voll, es sei denn, die Operation erhält die Sparsity. Wenn S spärlich ist und F voll ist, dann S + F, S * F und F \ S sind voll, während S. * F und S & F spärlich sind. In einigen Fällen kann das Ergebnis spärlich sein, obwohl die Matrix nur wenige Elemente enthält.

+0

@Adriaan suchen, nein, es funktioniert gut - das Ergebnis eine Sparse Matrix ist :) –

+1

@Adriaan ich eine Notiz sparsity des Ergebnisses hinzugefügt – Amro

+0

Danke, Amro - genau das, was ich gesucht habe :) –