【发布时间】:2018-04-01 11:40:43
【问题描述】:
考虑以下代码:
import scipy
print(scipy.__version__) # gives 0.19.1
# Scipy.stats.uniform
unif = scipy.stats.uniform(1, 2)
print(unif.a, unif.b, unif.args) # gives a=0, b=1, args=(1,2)
看来,无论我为loc 和scale 提供什么值,uniform 函数都会返回a=0,b=1。
将其与例如randint:
# Scipy.stats.randint
randi = scipy.stats.randint(1, 10)
print(randi.a, randi.b, randi.args) # gives a=1, b=9, args=(1,10)
...返回我期望的结果。
所以我的问题变成了:这是scipy 中的一个错误,还是我误解了什么? unif.args 值设置正确。
干杯!
【问题讨论】:
-
是否有任何文件表明
a和b可用于访问分布的限制? -
另外,请注意,在
randinta和p的情况下,如果您更改 loc(例如randint(2, 7, loc=10)),请不要遵循实际限制。 -
不,我在 scipy 文档中找不到明确说明。我知道我在这里对
uniform的行为做出了某些假设。我相信让我失望的是randint的行为方式(看似)不同 -
其实我找到了这个文档:docs.scipy.org/doc/scipy-0.19.1/reference/generated/…。由于uniform继承自这个类,我实际上希望
a,b成为分布的界限。 -
我认为问题在于
uniform是用参数loc和scale操作的。如果您采用其他分布,例如truncnorm、a和b,也只有在您不更改loc和scale时才是正确的。所以至少这似乎是一致的 :) 如果它是一个错误或内部实现细节,我不确定,但考虑到关于该主题的稀缺文档,我倾向于后者。
标签: python python-3.x scipy distribution