【问题标题】:Confusion over `a` and `b` attributes from scipy.stats.uniform对来自 scipy.stats.uniform 的 `a` 和 `b` 属性的混淆
【发布时间】: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)

看来,无论我为locscale 提供什么值,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 值设置正确。

干杯!

【问题讨论】:

  • 是否有任何文件表明ab 可用于访问分布的限制?
  • 另外,请注意,在randint ap 的情况下,如果您更改 loc(例如 randint(2, 7, loc=10)),请不要遵循实际限制。
  • 不,我在 scipy 文档中找不到明确说明。我知道我在这里对uniform 的行为做出了某些假设。我相信让我失望的是randint 的行为方式(看似)不同
  • 其实我找到了这个文档:docs.scipy.org/doc/scipy-0.19.1/reference/generated/…。由于uniform继承自这个类,我实际上希望a,b成为分布的界限。
  • 我认为问题在于uniform 是用参数locscale 操作的。如果您采用其他分布,例如truncnormab,也只有在您不更改locscale 时才是正确的。所以至少这似乎是一致的 :) 如果它是一个错误或内部实现细节,我不确定,但考虑到关于该主题的稀缺文档,我倾向于后者。

标签: python python-3.x scipy distribution


【解决方案1】:

据我了解ab是内部参数,scipy.stats.uniform中没有使用,因为它们的正常功能基本上是locscale参数的重复。

正如scipy.stats.uniform documentation 中提到的“这种分布在locloc + scale 之间是恒定的。”

所以我不认为这是一个错误,因为 ab 的值应该被视为实现细节,而不是面向用户的功能。

【讨论】:

    【解决方案2】:

    此相关的来源是here,删除了一点:

    class uniform_gen(rv_continuous):
        """A uniform continuous random variable.
        This distribution is constant between `loc` and ``loc + scale``.
        # ...
        """
        def _rvs(self):
            return self._random_state.uniform(0.0, 1.0, self._size)
    
       # ....
    uniform = uniform_gen(a=0.0, b=1.0, name='uniform')
    

    所以ab 将始终分别为0 和1。

    我猜测你的困惑(我的猜测太完全气了)是,大多数教科书都将定义统一的分布为between a and b。但在这种情况下,ab是一点@ 987654323,因为@jakevdp说,

    这种分布在locloc + scale 之间是恒定的。

    如此将此与传统定义相关联,认为 A EM>为@ 987654332和 B EM>为@ 987654333。

    (父类rv_continuous又定义了here如果您有兴趣。)

    【讨论】:

    • 感谢您的回答。我已经修改了我的代码并删除了对 a, b 的所有依赖项(实际上,.args 也可以正常工作)。我不一定会说我对通用的教科书定义感到困惑——只是普遍的无知;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多