4

我有一个 scipy.sparse_matrix A ,我想将元素中相当大的一部分归零。(在我今天使用的矩阵中,A 有大约 70M 条目,我想将其中的大约 700K 归零)。我有这些元素以几种不同的格式提供,但现在它们位于与 A 相同维度且值为 0/1 的 sparse_matrix B 中。

如果这些是密集矩阵(编辑:numpy 数组),我可以做 A = AA*B 但我无法想出任何简单的方法来用稀疏矩阵来做这些。(或者除了(a)遍历 B 中的元素并将这些元素处的 A 设置为 0 或(b)将所有内容转换为密集之外的任何方式,对于我所拥有的大小来说,这将几乎不适合内存......)

4

1 回答 1

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>
于 2013-02-12T20:54:45.210 回答