gpt4 book ai didi

python - Scipy 稀疏 csr 矩阵在 0.0/1.0 上返回 nan

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:29 24 4
gpt4 key购买 nike

我在 scipy.sparse.csr_matrix 中发现了一个意外的行为,这对我来说似乎是一个错误。任何人都可以确认这不正常吗?我不是稀疏结构方面的专家,所以我可能会误解正确的用法。

>>> import scipy.sparse
>>> a=scipy.sparse.csr_matrix((1,1))
>>> b=scipy.sparse.csr_matrix((1,1))
>>> b[0,0]=1
/home/marco/anaconda3/envs/py35/lib/python3.5/site-packages/scipy/sparse/compressed.py:730: SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
SparseEfficiencyWarning)
>>> a/b
matrix([[ nan]])

另一方面,numpy 正确处理了这个问题:

>>> import numpy as np
>>> a=np.zeros((1,1))
>>> b=np.ones((1,1))
>>> a/b
array([[ 0.]])

谢谢

最佳答案

对于稀疏矩阵/稀疏矩阵,

scipy/sparse/compressed.py

    if np.issubdtype(r.dtype, np.inexact):
# Eldiv leaves entries outside the combined sparsity
# pattern empty, so they must be filled manually. They are
# always nan, so that the matrix is completely full.
out = np.empty(self.shape, dtype=self.dtype)
out.fill(np.nan)
r = r.tocoo()
out[r.row, r.col] = r.data
out = np.matrix(out)

此部分将解释该操作。

用稍大的矩阵试试这个

In [69]: a=sparse.csr_matrix([[1.,0],[0,1]])
In [70]: b=sparse.csr_matrix([[1.,1],[0,1]])
In [72]: (a/b)
Out[72]:
matrix([[ 1., nan],
[ nan, 1.]])

因此,凡是 a 为 0(无稀疏值)的地方,除法都是 nan。它返回一个密集矩阵,并填充 nan

如果没有这段代码,按元素划分的稀疏元素会生成一个稀疏矩阵,其中包含那些“空”的非对角槽。

In [73]: a._binopt(b,'_eldiv_')
Out[73]:
<2x2 sparse matrix of type '<class 'numpy.float64'>'
with 2 stored elements in Compressed Sparse Row format>
In [74]: a._binopt(b,'_eldiv_').A
Out[74]:
array([[ 1., 0.],
[ 0., 1.]])

逆向可能有指导意义

In [76]: b/a
Out[76]:
matrix([[ 1., inf],
[ nan, 1.]])
In [77]: b._binopt(a,'_eldiv_').A
Out[77]:
array([[ 1., inf],
[ 0., 1.]])

看起来组合稀疏模式是由分子决定的。在进一步的测试中,在 eliminate_zeros 之后看起来像这样。

In [138]: a1=sparse.csr_matrix(np.ones((2,2)))
In [139]: a1
Out[139]:
<2x2 sparse matrix of type '<class 'numpy.float64'>'
with 4 stored elements in Compressed Sparse Row format>
In [140]: a1[0,1]=0
In [141]: a1
Out[141]:
<2x2 sparse matrix of type '<class 'numpy.float64'>'
with 4 stored elements in Compressed Sparse Row format>
In [142]: a1/b
Out[142]:
matrix([[ 1., nan],
[ inf, 1.]])

关于python - Scipy 稀疏 csr 矩阵在 0.0/1.0 上返回 nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com