我有一个scipy.sparse_matrix A,我希望将一个体积相当大的元素归零。 (在我今天正在使用的矩阵中,A有大约7000万个条目,我想将其中的大约700K归零)。我有几种不同格式的元素,但现在它们位于与A相同维度的sparse_matrix B中,其值为0/1。
如果这些是密集矩阵(编辑:numpy数组),我能做到 A = A-A * B. 但我无法用稀疏矩阵做任何简单的方法。 (或者实际上除了(a)迭代B中的元素并在这些元素中将A设置为0或(b)将所有内容转换为密集时,我所拥有的尺寸几乎不适合内存......)
答案 0 :(得分:2)
Scipy的稀疏矩阵有multiply
方法,可以进行逐点乘法。你可以这样做:
A = A - A.multiply(B)
我认为您可能必须运行eliminate_zeros()
方法来删除归零条目,但显然这不是必需的:
>>> sp_mat
<1000000x1000000 sparse matrix of type '<type 'numpy.float64'>'
with 1000 stored elements in Compressed Sparse Row format>
>>> zero_mat
<1000000x1000000 sparse matrix of type '<type 'numpy.int32'>'
with 96 stored elements in Compressed Sparse Row format>
>>> sp_mat - sp_mat.multiply(zero_mat)
<1000000x1000000 sparse matrix of type '<type 'numpy.float64'>'
with 904 stored elements in Compressed Sparse Row format>