functools.partial与scipy配合异常求助:偏函数调用返回-inf
问题解决:functools.partial参数绑定顺序错误导致逆CDF函数返回异常
问题重现
定义逆正态分布CDF函数并使用functools.partial绑定参数:
import functools from scipy.stats import norm def InvNormal(q,a,b): return norm.ppf(q,a,b) F_invs = functools.partial(InvNormal,0,1)
执行测试代码:
print(InvNormal(0.3,0,1)) print(F_invs(0.3))
得到结果:
-0.5244005127080409 -inf
问题原因
functools.partial按位置顺序绑定参数:
- 原函数
InvNormal的参数顺序为(q,a,b) partial(InvNormal,0,1)会把0绑定给第一个参数q,1绑定给第二个参数a- 调用
F_invs(0.3)时,0.3会被传入第三个参数b,实际执行norm.ppf(0, 1, 0.3) - 当
q=0时,正态分布的分位函数(PPF)返回负无穷,因此得到-inf
解决方法
使用关键字参数绑定a和b,确保后续传入的参数始终对应q:
import functools from scipy.stats import norm def InvNormal(q,a,b): return norm.ppf(q,a,b) # 用关键字参数固定a和b的值 F_invs = functools.partial(InvNormal, a=0, b=1) print(InvNormal(0.3,0,1)) print(F_invs(0.3))
执行后会得到正确结果:
-0.5244005127080409 -0.5244005127080409
内容的提问来源于stack exchange,提问作者Bernardo Pagnoncelli
相关产品推荐
相关产品推荐

