【问题标题】:Python - Behavior of `statistics.stdev()` on Numpy arraysPython - `statistics.stdev()` 在 Numpy 数组上的行为
【发布时间】:2021-12-20 03:43:12
【问题描述】:

我有一个 Numpy 数组,我想使用 statistics.stdev() 来计算它的标准差。这个操作的输出有点出乎意料。

import numpy as np
from statistics import stdev, pstdev

>>> a = np.array([0, 1, 2, 3])
>>> stdev(a)
1.0

这既不是样本标准差

>>> stdev([0, 1, 2, 3])
1.2909944487358056

也不是总体标准差

>>> pstdev([0, 1, 2, 3])
1.118033988749895

我想知道statistics.stdev() 是否不应该与 Numpy 数组一起使用,还是有一些潜在的机制导致了这种行为?

请注意,np.std() 适用于列表和 Numpy 数组。

>>> np.std([0, 1, 2, 3])
1.118033988749895
>>> np.std(np.array([0, 1, 2, 3]))
1.118033988749895

两者都按预期给出总体标准差。

【问题讨论】:

    标签: python numpy statistics


    【解决方案1】:

    发生这种情况是因为数字的typelist 中的数字类型是 float64,但 numpy.array 中的数字类型是 int64,您可以使用 listNumPy.array 中的dtype 更改为float64,如下所示:

    >>> a = np.array([0, 1, 2, 3])
    >>> a.dtype
    dtype('int64')
    >>> statistics.stdev(a)
    1.0
    
    >>> a = np.array([0, 1, 2, 3], dtype=float)
    >>> a.dtype
    dtype('float64')
    >>> statistics.stdev(a)
    1.2909944487358056
    
    >>> statistics.stdev([0, 1, 2, 3])
    1.2909944487358056
    

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 2018-09-26
      • 2013-10-09
      • 2021-09-14
      相关资源
      最近更新 更多