【发布时间】:2020-11-03 17:11:16
【问题描述】:
我正在尝试使用此功能:
@jit
def pv (matrix1, matrix2, vec, n):
for i in range (n):
for j in range (n):
matrix1[i,j] = 1 - sum (hypergeom.pmf(X, n, int(vec[i]), int(vec[j])) for X in range(matrix2[i,j]))
但是我得到了 断言错误,很多事情我什至都没有开始理解(从 numba 回溯),最后 AssertionError:在对象模式管道中失败(步骤:对象模式前端)。我怀疑与 hyergeom 有关,但我看不出我做错了什么
编辑:最后我没有找到一种方法来实现使用@jit 的代码,但我找到了执行此操作的函数 scipy.stats.hypergeom.cdf:
sum (hypergeom.pmf(X, n, int(vec[i]), int(vec[j])) for X in range(matrix2[i,j]))
from scipy.stats import hypergeom
hypergeom.cdf(m2[i,j], n, v[i], v[j])
虽然这个解决方案加快了代码速度,但 for 循环仍然很慢(n =5053 需要半个多小时才能运行)
【问题讨论】: