【发布时间】:2011-09-19 20:49:09
【问题描述】:
如何将scipy.sparse 矩阵提升到元素级的幂? numpy.power 应该根据its manual 执行此操作,但它在稀疏矩阵上失败:
>>> 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 方法。
【问题讨论】:
-
我对 numpy 不够熟悉,无法告诉您答案,但您的代码与文档并不矛盾。 numpy.power 的第二个参数不应该是一个数字,而是另一个矩阵。
-
看起来它正在调用对象的
__pow__方法,该方法试图对整个矩阵求平方,而不是按元素进行。这失败了,因为正如它所说,矩阵不是正方形的。 -
@RoundTower:实际上,第二个元素应该是一个数组,它与 Numpy 中的矩阵不同,但标量与
(1,)或(1,1)数组相同numpy.power在密集阵列上的用途。
标签: python numpy scipy sparse-matrix exponentiation