2013-07-18 52 views
6

我正在進行電力系統分析的程序,我需要使用稀疏矩陣。將值添加到包含索引和值的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的方式來做到這一點?

謝謝

回答

3

您應該使用coo_matrix相反,在那裏你可以改變屬性先前創建的稀疏矩陣的colrowdata

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)條目將彙總在一起。這有助於有限元矩陣等的有效構造。 (參見示例)_ 或多或少地解決了我所遇到的問題。在我的代碼中,有幾個對象有助於這個矩陣,兩個對象可以貢獻相同的(i,j)條目。 這意味着每次我想添加一個對象的貢獻時,我必須重建矩陣? – amalbe

+0

嗨...是的,只需將'col'和'row'參數分配給'coo_matrix',就可以使用不同的對象來構建矩陣。我不確定'SciPy'在構建稀疏矩陣時是否會創建一個內部副本 –