我有一個scipy.sparse.dok_matrix
(尺寸m x n),想要添加一個長度爲m的平坦numpy數組。添加一個numpy數組到一個scipy.sparse.dok_matrix
for col in xrange(n):
dense_array = ...
dok_matrix[:,col] = dense_array
然而,當它試圖刪除一個非現有密鑰(del self[(i,j)]
)這個代碼在引發dok_matrix.__setitem__
異常。
所以,現在我做這個unelegant方式:
for col in xrange(n):
dense_array = ...
for row in dense_array.nonzero():
dok_matrix[row, col] = dense_array[row]
這感覺非常ineffecient。 那麼,做這件事最有效的方法是什麼?
謝謝!
的「unelegant」的方式篩選出的零和'dense_array.nonzeros()'在dok_matrix插入值之前,這就是爲什麼它不會崩潰。 非常感謝! – PhilS 2010-04-20 17:47:46
Doh,錯過了,但很高興我能幫上忙。 – 2010-04-20 17:53:09
side-note:我認爲上面在'dok.py'中顯示的代碼是錯誤的,因爲如果密鑰(i,j)還不存在,則在'dok_matrix'中設置零值。我打開了一張票(http://projects.scipy.org/scipy/ticket/1160)。 此外,如果'dense_array'稀疏,我的「不優雅」的方式會更好,因爲只有非零值必須被檢查和插入('__setitem__'只爲他們調用)。所以我堅持我的舊版本,雖然你提到的那個更漂亮... – PhilS 2010-04-21 08:44:53