python - 为什么 scipy.stats.rv_discrete 的意思和期望显示出意想不到的差异?
问题描述
我有一个 scipy stats rv_discrete 分布,其中具有默认值的期望方法无法匹配平均值。
当我尝试使用玩具示例时,它按预期工作:
from scipy.stats import rv_discrete
x = (1.0, 3.0, 4.0, 6.0)
px = (0.1, 0.6, 0.2, 0.1)
dx = rv_discrete(values=(x, px))
print(dx.mean(), dx.expect(), dx.expect(lb=5.0, conditional=True))
给出:
3.3000000000000003 3.3000000000000003 5.999999999999996
y = [200.0, 300.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000.0, 1100.0, 1200.0, 1300.0, 1400.0, 1500.0, 1600.0, 1700.0, 1800.0, 1900.0, 2000.0, 2100.0, 2200.0, 2300.0, 2400.0, 2500.0, 2600.0, 2700.0, 2800.0, 2900.0, 3000.0, 3100.0, 3200.0, 3300.0, 3400.0, 3500.0, 3600.0, 3700.0, 3800.0, 3900.0, 4000.0, 4100.0, 4200.0, 4300.0, 4400.0, 4500.0, 4600.0, 4700.0, 4800.0]
py = [0.0004, 0.0, 0.0033, 0.006500000000000001, 0.0, 0.0, 0.004399999999999999, 0.6862, 0.0, 0.0, 0.0, 0.00019999999999997797, 0.0006000000000000449, 0.024499999999999966, 0.006400000000000072, 0.0043999999999999595, 0.019499999999999962, 0.03770000000000007, 0.01759999999999995, 0.015199999999999991, 0.018100000000000005, 0.04500000000000004, 0.0025999999999999357, 0.0, 0.0041000000000001036, 0.005999999999999894, 0.0042000000000000925, 0.0050000000000000044, 0.0041999999999999815, 0.0004999999999999449, 0.009199999999999986, 0.008200000000000096, 0.0, 0.0, 0.0046999999999999265, 0.0019000000000000128, 0.0006000000000000449, 0.02510000000000001, 0.0, 0.007199999999999984, 0.0, 0.012699999999999934, 0.0, 0.0, 0.008199999999999985, 0.005600000000000049, 0.0]
dy = rv_discrete(values=(y, py))
print(dy.mean(), dy.expect(), dy.expect(lb=1000.0, conditional=True))
给出:
1400.79 617.58 0.0
任何想法为什么 dy.expect() 与 dy.mean() 不匹配?
解决方案
这是一个 scipy 错误。(chunksize
依赖是确凿的证据,没有理由对这个短序列进行分块迭代)。该错误影响 scipy 1.5.2 及以下版本。
推荐阅读
- vba - Visual Basic 组件
- python - Django 如何从数据库中检索现有帖子的值以便我们可以编辑
- android - 无法解析配置的所有工件并且找不到:未指定
- java - 为什么 Intellij IDEA 在我使用 java 8 时建议使用“List.of”来替换“Collections.unmodifiableList”?
- javascript - 向第三方 API 发送带有 GET 请求的标头
- actions-on-google - 为什么我的谷歌操作会挂在背靠背命令上?
- java - 需要对我的代码进行少量更改(java)(计数行)(初学者)
- java - Spring Boot LDAP 检查用户是否属于特定组
- ios - Xcode 上的 Swift._ArrayBuffer._copyContents
- javascript - 如何将数组转换为数组对象,例如 ['in','gs'] 到 [{"state":"in"},{"state":"gs"}] 在javascript中?