¿Cómo elevo una matriz scipy.sparse
a una potencia, elemento-sabio? numpy.power
debe, según its manual, hacer esto, pero falla en matrices dispersas:Potencia de elemento de scipy.sparse matriz
>>> 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
mismo problema con X**2
. La conversión a una matriz densa funciona, pero desperdicia preciosos segundos.
Tuve el mismo problema con np.multiply
, que resolví con el método multiply
de la matriz dispersa, pero parece que no hay un método pow
.
No estoy lo suficientemente familiarizado con numpy para decirle la respuesta, pero su código no contradice la documentación. El segundo argumento para numpy.power no debe ser un número, sino otra matriz. – RoundTower
Parece que está llamando al método '__pow__' del objeto, que intenta cuadrar toda la matriz, en lugar de hacerlo en forma de elemento. Eso falla porque, como dice, la matriz no es cuadrada. –
@RoundTower: en realidad, el segundo elemento debe ser una matriz, que no es lo mismo que una matriz en Numpy, pero un escalar es lo mismo que una matriz '(1,)' o '(1,1)' para el propósitos de 'numpy.power' en una matriz densa. –