微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Python scipy.norm.cdf 中的向量化正态累积函数与其标量版本不同

如何解决为什么 Python scipy.norm.cdf 中的向量化正态累积函数与其标量版本不同

为什么 scipy.norm.cdf 的矢量化版本与其标量版本不同? 我必须更改为生存函数(等于 1-cdf)。 这是一个错误还是术语 cdf 和 sf 的常见用法? 我的python是3.9.2,scipy版本是scipy 1.7.0。

norm.cdf(1.65,loc = 0,scale = 1)
norm([1.65,1.65],scale=1).cdf(np.zeros(2))
norm([1.65,scale=1).sf(np.zeros(2))

输出

0.9505285319663519 
array([0.04947147,0.04947147])
array([0.95052853,0.95052853])

解决方法

等价的是norm.cdf(x,loc,scale)norm(loc,scale).cdf(x)。这适用于标量和矢量化参数:

In [2]: norm.cdf(1.65,loc=0,scale=1)
Out[2]: 0.9505285319663519

In [3]: norm(loc=0,scale=1).cdf(1.65)
Out[3]: 0.9505285319663519

In [4]: norm.cdf([1.65,1.65],scale=1)
Out[4]: array([0.95052853,0.95052853])

In [5]: norm(loc=0,scale=1).cdf([1.65,1.65])
Out[5]: array([0.95052853,0.95052853])

为了避免混淆,我建议始终使用 loc 和 scale 作为关键字参数,即使分布接受它们作为位置。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。