为什么python statistics.mean()返回一个int类型,而不是float

时间:2017-09-25 00:59:58

标签: python numpy

我使用statistics.mean()来计算采样分布的均值。但是,在以下代码中,以下值的返回值是舍入整数。如果我使用numpy.mean()代替,将获得正确的float类型结果。那么这里发生了什么?

import statistics
from scipy import stats

posterior_sample = stats.beta.rvs(3, 19, size = 1000)
predictive_sample = stats.binom.rvs(100, posterior_sample, size = 1000)
print(statistics.mean(predictive_sample))
print(statistics.mean([(data >= 15).astype(int) for data in predictive_sample]))

1 个答案:

答案 0 :(得分:4)

statistics.mean不支持numpy.int64数据类型。

来自statistics的{​​{3}}:

  

除非另有明确说明,否则这些函数支持int,float,   decimal.Decimal和fractions.Fraction。与其他类型的行为   (当前是否在数字塔中)目前不受支持。杂   类型也是未定义的和依赖于实现的。如果您输入   数据由混合类型组成,您可以使用map()来确保   一致的结果,例如map(float,input_data)。

要解决此问题,您可以按照建议进行操作,并在传递给float之前将数据转换为statistics.mean()

print(statistics.mean(map(float, predictive_sample)))

现在找出这种行为背后的根本原因:

statistics.mean statistics._convert的末尾,有一个float调用,用于将返回值转换为适当的类型(即输入为分数时的分数) ,int如果输入为_convert等。

T中的docs用于捕获其他数据类型,并确保返回的值与提供的数据一致(value是每个输入值的数据类型, try: return T(value) 是计算出的平均值):

numpy.int64

如果您的输入为_convert,则numpy.int64函数会尝试将计算的均值转换为mean数据类型。 NumPy愉快地将浮点数转换为int(我认为是向下舍入)。因此numpy.int64函数返回一个四舍五入到最接近整数的平均值,编码为numpy.float64

如果您的输入数据为 [[UIApplication sharedApplication] setApplicationIconBadgeNumber:12]; ,那么您就不会遇到此问题。