问题
How do I raise a scipy.sparse
matrix to a power, element-wise? numpy.power
should, according to its manual, do this, but it fails on sparse matrices:
>>> 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
Same problem with X**2
. Converting to a dense array works, but wastes precious seconds.
I've had the same problem with np.multiply
, which I solved using the sparse matrix's multiply
method, but there seems to be no pow
method.
回答1:
This is a little low-level, but for element-wise operations you can work with the underlying data array directly:
>>> 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
回答2:
I just ran into the same question and find that sparse matrix now supports element-wise power. For the case above, it should be:
X.power(2)
来源:https://stackoverflow.com/questions/6431557/element-wise-power-of-scipy-sparse-matrix