Python 为什么平均值小于最小值?为什么64位浮点值会发生变化?

Python 为什么平均值小于最小值?为什么64位浮点值会发生变化?,python,arrays,numpy,floating-accuracy,floating-point-conversion,Python,Arrays,Numpy,Floating Accuracy,Floating Point Conversion,我有一个输入数组,它是一个屏蔽数组。 当我检查平均值时,我得到一个无意义的数字:小于报告的最小值 所以,原始数组:numpy.mean(A)

我有一个输入数组,它是一个屏蔽数组。
当我检查平均值时,我得到一个无意义的数字:小于报告的最小值

所以,原始数组:
numpy.mean(A)
。注意
A.dtype
返回
float32

修正:
A3=A.astype(float)
。A3仍然是一个蒙面数组,但现在平均值介于最小值和最大值之间,所以我相信它是正确的!现在由于某种原因,
A3.dtype
float64
。为什么?为什么这会改变它,为什么它在64位是正确的,在32位是非常不正确的

有人能解释为什么我需要重铸数组来精确计算平均值吗?(不管有没有numpy,事实证明)

编辑:我使用的是64位系统,所以是的,这就是为什么重铸将其更改为64位。事实证明,如果我对数据进行子集划分(使用
netCDF4数据集
从netCDF输入中提取),则不会出现此问题-因此它是由溢出引起的,因此切换到64位可以防止此问题。

所以我仍然不清楚为什么它最初会加载为float32,但我想它的目的是节省空间,即使它是64位系统。数组本身是
1872x128x256
,非屏蔽值约为300,这足以导致溢出:)

如果使用大型数组,请注意潜在的溢出问题

在本例中,将32位浮点值更改为64位浮点值可以避免(据我所知)溢出,从而导致异常的
mean
计算

请给出一个实际的代码示例来说明这个问题。
numpy
数组与Python数组完全不同,我想你是指前者吗?如果你在64位系统上,
a.astype(float)
将返回一个
np.float64
数组。我最终找到了它,将编辑post。没有添加代码或数组类型,因为我想保持其通用性,而不是将NetCDF引入其中:)和@ebarr您是对的,系统是64位的事实是关键,它迫使它转到首选精度,而不是所需的最低精度。这是精度损失而不是溢出。检查: