4

scipy.sparse_matrix Aがあり、適切なサイズの要素の一部をゼロにしたい。(私が今日使用しているマトリックスでは、Aには約7000万のエントリがあり、そのうちの約700Kをゼロにしたいです)。これらの要素はいくつかの異なる形式で利用できますが、今のところ、それらは0/1の値を持つAと同じ次元のsparse_matrixBにあります。

これらが密行列(編集: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 に答える