分布密度

时间:2018-07-16 20:00:27

标签: python numpy scipy probability distribution

我想实现func()函数,该函数可以完成以下任务: 汽车的平均重量为m千克,标准偏差为s千克。您希望所有汽车的哪一部分重量超过k千克(概率必须为<1)?

import scipy.stats as sts
def func(m, s, k):   
  norm_rv = sts.norm(loc=m, scale=s)
  return round(norm_rv.cdf(k), 4)
print('Result:', func(25, 3, 27))

结果为0.7475,但必须为0.2546 我做错了什么?

3 个答案:

答案 0 :(得分:1)

norm_rv.cdf(k)返回随机变量具有小于或等于 k的值的概率。

您的实施应该是

import scipy.stats as sts
def func(m, s, k):   
    norm_rv = sts.norm(loc=m, scale=s)
    return round(1 - norm_rv.cdf(k), 4) # This is where the change is
print('Result:', func(25, 3, 27))

答案 1 :(得分:0)

首先,阅读文档:cdf是累积分布函数,是从-infinity到给定点的积分。简而言之,这是重量不超过 k的汽车所占的比例。您需要从1.0000中减去该值。

这将为您提供0.2525的值。我不确定为什么会期望0.2546。

答案 2 :(得分:0)

norm_rv.sf(k), 4

生存功能(也定义为1-cdf,但sf有时更准确)。 https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html