Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么python statistics.mean()返回int类型,而不是float_Python_Numpy - Fatal编程技术网

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

为什么python statistics.mean()返回int类型,而不是float,python,numpy,Python,Numpy,我使用statistics.mean()计算抽样分布的平均值。但是,在下面的代码中,以下值返回的值是舍入整数。如果改用numpy.mean(),将得到正确的浮点类型结果。这是怎么回事 import statistics from scipy import stats posterior_sample = stats.beta.rvs(3, 19, size = 1000) predictive_sample = stats.binom.rvs(100, posterior_sample, si

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

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]))

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

从用于统计的

除非另有明确说明,否则这些函数支持int、float、, 小数。小数和分数。分数。与其他类型的行为 (无论是否在数字塔中)当前不受支持。混合的 类型也未定义且依赖于实现。如果你的意见 数据由混合类型组成,您可以使用map()来确保 一致的结果,例如地图(浮动、输入数据)

要解决这个问题,您可以按照建议进行操作,将数据转换为
float
,然后再传递到
statistics.mean()

现在了解这种行为背后的根本原因:

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

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

如果您的输入是
numpy.int64
,则
\u convert
函数尝试将计算的平均值转换为
numpy.int64
数据类型。NumPy很高兴地将浮点转换为int(我想是向下舍入)。因此,
mean
函数返回一个四舍五入到最近整数的平均值,编码为
numpy.int64


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

一个简单的例子:
statistics.mean([6,7,8,9])
statistics.mean(np.array([6,7,8,9])
print(statistics.mean(map(float, predictive_sample)))
try:
    return T(value)