3

私はこれについて多くのことを調査しましたが、この問題に対する実用的な解決策を見つけることができませんでした。私は scipy を使用して csr スパース マトリックスを作成しており、このマトリックスをすべて 1 の同等のマトリックスから減算したいと考えています。scipy および numpy 表記法​​では、行列が疎でない場合、単純に 1 - MatrixVariable と書くことでそうすることができます。ただし、Matrix がスパースの場合、この操作は実装されません。次の明白な解決策を考えることができました:

スパース行列全体を反復処理し、すべてのゼロ要素を 1 に設定し、すべての非ゼロ要素を 0 に設定します。

ただし、これにより、ほとんどの要素が 1 で、0 の要素がわずかしかない行列が作成されます。これはもはや疎ではなく、巨大なサイズのために密に変換できませんでした。

これを行うための代替的かつ効果的な方法は何ですか?

ありがとう。

4

2 に答える 2

1

新しい行列はどこにでも s があるため、疎ではありません1。したがって、それを保持するには密な配列が必要になります。

new_mat = np.ones(sps_mat.shape, sps_mat.dtype) - sps_mat.todense()

これには、行列がメモリに収まる必要があります。実際には、メモリに 3 回収まる必要があります。それが問題である場合は、次のようにしてより効率的にすることができます。

new_mat = sps_mat.todense()
new_mat *= -1
new_mat += 1
于 2013-07-02T13:57:01.747 に答える
0

次のように、疎行列からデータにアクセスできます1D array

ss.data *= -1
ss.data += 1

1 - ss疎行列のすべての非ゼロ要素に対して、のように機能します。

于 2013-07-02T13:26:35.310 に答える