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な方法でしょうか?
は、あなたが以前に作成したスパース行列の属性col
、row
とdata
を変更することができます代わりにcoo_matrix
を、使用する必要があります
ありがとうございました。ドキュメントでは、次のように書いています。 デフォルトでCSRまたはCSC形式に変換すると、重複する(i、j)エントリがまとめられます。これにより、有限要素行列などの効率的な構築が容易になる。 (例を参照)_ 多かれ少なかれ私が持っていた問題を解決します。私のコードでは、この行列に寄与するいくつかのオブジェクトがあり、2つのオブジェクトは同じ(i、j)エントリに貢献できます。 これは、1つのオブジェクトのコントリビューションを追加するたびに、マトリックスを再構築する必要があることを意味しますか? – amalbe
hi ...はい、 'colo_matrix'に' col'と 'row'パラメータを割り当てるだけで、異なるオブジェクトを使って行列を構築することができます。スパース行列を構築するときにSciPyが内部コピーを作成するかどうかはわかりませんが –