當試圖直接設置稀疏lil_matrix
的data
屬性時,我遇到了非常意外的行爲。有人可以解釋下面的簡單例子是怎麼回事?稀疏lil_matrix不能分配數據
我特別的用例是我想設置行模2;即在密集矩陣說我只想做matrix[0] %= 2
。
from scipy import sparse
import numpy as np
np.random.seed(0)
matrix = sparse.rand(10**3,10**3).tolil()
num_entries = len(matrix[0].data[0])
print num_entries
# 9
# this throws no errors...
matrix[0].data[0] = [2]*num_entries
# but does nothing!
assert (np.array(matrix[0].data) == 2).all() # FAILS
# in fact nothing can be done to alter .data directly...
matrix[0].data[0].pop() # returns the last float from the row
# but does not actually pop it from the row!
assert (len(matrix[0].data[0]) == num_entries-1) # FAILS
'num_entries'的價值是什麼?我猜'0'。 'matrix.data'是列表的列表,而'matrix.data [0]'是其中的第一個。它可能是空的。 – hpaulj 2014-08-28 19:58:33
我在上面的代碼中添加了它 - 但num_entries是9. matrix.data實際上是列表的Python對象的numpy.array。 – gabe 2014-08-28 20:07:27
所以'matrix [i] .data [0] == matrix.data [i]'適用於所有'i',但與'is'運算符相比並非如此。 – hpaulj 2014-08-28 22:08:36