python – 在numpy数组上应用统计方法:意外结果

请解释.

import statistics
x = [0,1]
statistics.mean(x) 
## 0.5

但:

import numpy 
import statistics
x = numpy.array([0,1])
statistics.mean(x) 
## 0

我很确定这是一个基本的,众所周知的,过度讨论的问题:请链接到副本,因为我找不到.

最佳答案 原因是统计模块中有一个转换方法,它检查数据类型是否是int的子类.这适用于int,但不适用于np.int32.

import statistics
from fractions import Fraction

a = statistics._convert(Fraction('1/2'), int)       # 0.5
b = statistics._convert(Fraction('1/2'), np.int32)  # 0

def _convert(value, T):
    """Convert value to given numeric type T."""
    if type(value) is T:
        return value

    #### THIS BIT WORKS FOR int BUT not for np.int32 ###
    if issubclass(T, int) and value.denominator != 1:
        T = float

    try:
        return T(value)
    except TypeError:
        if issubclass(T, Decimal):
            return T(value.numerator)/T(value.denominator)
        else:
            raise

因此,您可以将统计信息与列表一起使用,也可以将numpy与数组一起使用:

>使用statistics.mean([0,1]);要么
>使用np.mean(np.array([0,1]))或np.array([0,1]).mean().

点赞