稀疏lil_matrix无法分配数据

时间:2014-08-28 17:43:48

标签: python scipy sparse-matrix

尝试直接设置稀疏data的{​​{1}}属性时,遇到非常意外的行为。有人可以通过以下简单示例解释发生了什么吗?

我的特定用例是我想设置行模2;即在密集矩阵中说话我只想做lil_matrix

matrix[0] %= 2

2 个答案:

答案 0 :(得分:1)

我不太确定matrix[0]是什么类型的对象,但我认为您的意思是删除matrix上的索引并仅将其保留在data上:

num_entries = len(matrix.data[0])
matrix.data[0] = [2]*num_entries

答案 1 :(得分:0)

@vlsd发现了这个错误,但是我想补充一下这个错误。

我发布的代码的问题是我(全程)分配给matrix[0].data。问题是matrix[0]与密集阵列的工作方式不同;它不是简单地指向同一个对象,而是制作一个新对象(我想)。因此,为这个新对象分配数据很好,但它不会影响matrix。这就是问题所在。

所以下面的代码工作正常:

matrix.data[0] = [2]*num_entries
assert (np.array(matrix.data[0]) == 2).all() # passes
matrix.data[0].pop()
assert (len(matrix.data[0]) == num_entries-1) # passes

NB 从列表中弹出通常是一个坏主意,因为这可能会破坏稀疏矩阵的完整性。但这只是为了演示。它现在有道理。