scipy.sparse 矩阵的逐元素幂

发布于 2024-11-16 15:56:22 字数 796 浏览 4 评论 0原文

如何将 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方法。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

木森分化 2024-11-23 15:56:22

我刚刚遇到了同样的问题,发现稀疏矩阵现在支持逐元素幂。对于上面的情况,应该是:

 X.power(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)
也只是曾经 2024-11-23 15:56:22

这有点低级,但对于逐元素操作,您可以直接使用底层数据数组:

>>> 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

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文