2013-07-18 16 views
6

私はPower System解析用のプログラムで作業しています。私はスパース行列で作業する必要があります。インデックスと値を持つScipyスパース行列に値を追加する

self.A = bsr_matrix((val, (row,col)), shape=(nele, nbus), dtype=complex) 

時間の経過とともに変化しません。この行列のよう:

は、私はちょうど次の呼び出しで疎行列を埋めるルーチンがあります。さらに別のマトリックスは時間とともに変化し、私はそれを更新する必要があります。

co  = [ 2, 3, 6] 
row = [ 5, 5, 5] 
val = [ 0.1 + 0.1j, 0.1 - 0.2j, 0.1 - 0.4j] 

私は以前に初期化スパース行列にそれらを追加することができます。たとえば、有するという方法はありますか?どのようにそれを行うためにもっとpythonicな方法でしょうか?

は、あなたが以前に作成したスパース行列の属性colrowdataを変更することができます代わりにcoo_matrixを、使用する必要があります

答えて

3

ありがとう:

from scipy.sparse import coo_matrix 
nele=30 
nbus=40 
col = [ 2, 3, 6] 
row = [ 5, 5, 5] 
val = [ 0.1 + 0.1j, 0.1 - 0.2j, 0.1 - 0.4j] 
test = coo_matrix((val, (row,col)), shape=(nele, nbus), dtype=complex) 

print test.col 
#[2 3 6] 
print test.row 
#[5 5 5] 
print test.data 
#[ 0.1+0.1j 0.1-0.2j 0.1-0.4j] 
+0

ありがとうございました。ドキュメントでは、次のように書いています。 デフォルトでCSRまたはCSC形式に変換すると、重複する(i、j)エントリがまとめられます。これにより、有限要素行列などの効率的な構築が容易になる。 (例を参照)_ 多かれ少なかれ私が持っていた問題を解決します。私のコードでは、この行列に寄与するいくつかのオブジェクトがあり、2つのオブジェクトは同じ(i、j)エントリに貢献できます。 これは、1つのオブジェクトのコントリビューションを追加するたびに、マトリックスを再構築する必要があることを意味しますか? – amalbe

+0

hi ...はい、 'colo_matrix'に' col'と 'row'パラメータを割り当てるだけで、異なるオブジェクトを使って行列を構築することができます。スパース行列を構築するときにSciPyが内部コピーを作成するかどうかはわかりませんが –