Python 解决';总和pk不等于1';scipy'中的错误;s stats.rv_离散模块

Python 解决';总和pk不等于1';scipy'中的错误;s stats.rv_离散模块,python,scipy,floating-accuracy,probability-distribution,Python,Scipy,Floating Accuracy,Probability Distribution,在python3中,scipy的stats.rv_离散函数要求概率之和为1,但由于内存中浮点数的表示,所以该和不是1 幸运的是,scipy安装在我的主目录中,因此我能够注释掉~.local/lib/python3.7/site-packages/scipy/stats//u distn\u infrastructure.py文件中检查总和的“if”行,从而使其正常工作。但是,当这些代码要在另一个系统中运行时,该怎么办呢。将文件复制到工作目录并导入会导致错误过多。从头开始的自定义代码(使用列表)似

在python3中,scipy的stats.rv_离散函数要求概率之和为1,但由于内存中浮点数的表示,所以该和不是1

幸运的是,scipy安装在我的主目录中,因此我能够注释掉~.local/lib/python3.7/site-packages/scipy/stats//u distn\u infrastructure.py文件中检查总和的“if”行,从而使其正常工作。但是,当这些代码要在另一个系统中运行时,该怎么办呢。将文件复制到工作目录并导入会导致错误过多。从头开始的自定义代码(使用列表)似乎效率很低

if len(xk) != len(pk):
    raise ValueError("xk and pk need to have the same length.")
#if not np.allclose(np.sum(pk), 1):
    #raise ValueError("The sum of provided pk is not 1.")

我希望从零开始得到一个有效的函数或一个适当的解决方法。

您可以规范化pk的值,从而避免错误。这将“强制”概率之和等于1

之前:

from scipy import stats
xk = np.arange(7)
pk = (0.1, 0.2, 0.3, 0.1, 0.1, 0.0, 0.19) 
custm = stats.rv_discrete(name='custm', values=(xk, pk))
错误:ValueError:提供的主键之和不是1

之后:

from scipy import stats
xk = np.arange(7)
pk = (0.1, 0.2, 0.3, 0.1, 0.1, 0.0, 0.19)
pk_norm = tuple(p/sum(pk) for p in pk)
custm = stats.rv_discrete(name='custm', values=(xk, pk_norm))
结果:好的