我正在开发一个程序,该程序通过生成一系列值范围内的超几何分布的PMF列表,计算此列表与另一个列表的成对乘积,使用公共分母对列表进行归一化来计算错误值,然后汇总列表的一部分。
该代码在我的Windows笔记本电脑(在Anaconda上运行Python 3.7.1)和Ubuntu环境(Python 3.6.7)上运行良好,但是无法在新的Windows桌面(运行Python 3.7.3)上运行。我已经看过scipy文档,但是关于hypergeom.pmf函数可以作为参数处理的内容并没有太多细节。我相信这与新环境有关,也许与安装的Python版本有关。
from scipy.stats import hypergeom as hg
def get_error(self, stop: int, audit: int) -> float:
# Get posterior distribution
posterior = hg.pmf(stop, self.total_votes, range(0, self.total_votes+1), audit)
posterior = [posterior[i]*self.prior[i] for i in range(len(posterior))]
posterior /= sum(posterior)
return sum(posterior[range(self.total_votes//2 + 1)])
通常,posterior = hg.pmf(stop, self.total_votes, range(0, self.total_votes+1), audit)
将返回一个PMF列表,然后该函数将返回一个介于0和1之间的浮点数。在新计算机上运行时,该程序将不会继续运行并给出以下错误消息:>
...
test_error = self.get_error(test_stop, audit_size)
File "C:\...\filename.py", line 77, in get_error
posterior = hg.pmf(stop, self.total_votes, list(range(0, self.total_votes+1)), audit)
File "C:\...\AppData\Local\Programs\Python\Python37\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 2942, in pmf
_a, _b = self._get_support(*args)
File "C:..\AppData\Local\Programs\Python\Python37\lib\site-packages\scipy\stats\_discrete_distns.py", line 355, in _get_support
return np.maximum(N-(M-n), 0), np.minimum(n, N)
TypeError: unsupported operand type(s) for -: 'int' and 'list'
似乎hypergeom.pmf()函数不再接受range()作为参数,但是该代码在其他两个环境中也能正常工作。设置新环境时,新机器上是否可能存在未正确安装/升级的更新或过时软件包?