首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么python statistics.mean()返回一个int类型,而不是浮动

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

Stack Overflow用户
提问于 2017-09-25 00:59:58
回答 1查看 4.2K关注 0票数 3

我使用statistics.mean()从抽样分布计算平均值。但是,在下面的代码中,从以下值返回的值是四舍五入整数。如果我使用numpy.mean()代替,将得到正确的浮动类型的结果。这是怎么回事?

代码语言:javascript
复制
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]))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-25 01:14:10

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

来自文档 for statistics

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

为了解决这个问题,您可以按照建议进行,并在传递到float之前将数据转换为statistics.mean()

代码语言:javascript
复制
print(statistics.mean(map(float, predictive_sample)))

现在,由于这种行为背后的根本原因,

源代码 for statistics.mean的末尾,有一个对statistics._convert的调用,这意味着将返回的值转换为适当的类型(即如果输入为分数,则为分数,如果输入为int,则为float )。

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

代码语言:javascript
复制
try:
    return T(value)

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

如果您的输入数据是numpy.float64,那么您就不会遇到这个问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46396273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档