Ome*_*mer 11 python scipy sparse-matrix
我试图从一个巨大的(1Mx1M)CSR矩阵(SciPy)中过滤小于10的值.由于我的所有值都是整数,除以10并且重新乘以10就可以完成这项工作,但我想知道是否有更好的方法来过滤元素.
编辑: 下面的答案有效.检查您是否拥有最新版本的SciPy.
你也可以用较少的hacky,但可能更慢:
m = m.multiply(m >= 10)
Run Code Online (Sandbox Code Playgroud)
要了解发生了什么:
>>> m = scipy.sparse.csr_matrix((1000, 1000), dtype=np.int)
>>> m[np.random.randint(0, 1000, 20),
np.random.randint(0, 1000, 20)] = np.random.randint(0, 100, 20)
>>> m.data
array([92, 46, 99, 24, 75, 16, 49, 60, 87, 64, 91, 37, 30, 32, 25, 40, 99,
9, 3, 84])
>>> m >= 10
<1000x1000 sparse matrix of type '<type 'numpy.bool_'>'
with 18 stored elements in Compressed Sparse Row format>
>>> m = m.multiply(m >= 10)
>>> m
<1000x1000 sparse matrix of type '<type 'numpy.int32'>'
with 18 stored elements in Compressed Sparse Row format>
>>> m.data
array([92, 46, 99, 24, 75, 16, 49, 60, 87, 64, 91, 37, 30, 32, 25, 40, 99,
84])
Run Code Online (Sandbox Code Playgroud)