17

scipy.sparse行列を要素ごとに累乗するにはどうすればよいですか?そのマニュアルnumpy.powerによれば、これを行う必要がありますが、スパース行列では失敗します。

>>> X
<1353x32100 sparse matrix of type '<type 'numpy.float64'>'
        with 144875 stored elements in Compressed Sparse Row format>

>>> np.power(X, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".../scipy/sparse/base.py", line 347, in __pow__
    raise TypeError('matrix is not square')
TypeError: matrix is not square

と同じ問題X**2。密な配列への変換は機能しますが、貴重な秒数を浪費します。

についても同じ問題がnp.multiplyあり、スパース行列のmultiply方法を使用して解決しましたが、方法がないようpowです。

4

2 に答える 2

20

同じ質問に遭遇したところ、スパース行列が要素ごとのパワーをサポートしていることがわかりました。上記の場合、次のようになります。

 X.power(2)
于 2017-04-09T07:19:08.143 に答える
11

これは少し低レベルですが、要素ごとの操作では、基になるデータ配列を直接操作できます。

>>> import scipy.sparse
>>> X = scipy.sparse.rand(1000,1000, density=0.003)
>>> X = scipy.sparse.csr_matrix(X)
>>> Y = X.copy()
>>> Y.data **= 3
>>> 
>>> abs((X.toarray()**3-Y.toarray())).max()
0.0
于 2011-06-21T21:23:21.707 に答える