You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:06:24