为什么平均值小于最小值,为什么这会改变64位浮点数?

时间:2014-04-10 06:46:05

标签: python arrays numpy floating-accuracy floating-point-conversion

我有一个输入数组,它是一个蒙版数组 当我检查平均值时,我得到一个荒谬的数字:小于报告的最小值!

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

FIX:A3=A.astype(float)。 A3仍然是一个蒙面阵列,但现在平均值介于最小值和最大值之间,所以我有一些信念它是正确的!由于某种原因,A3.dtypefloat64。为什么??为什么会改变它,为什么它在64位时是正确的并且在32位时非常不正确?

任何人都可以解释为什么我需要来重铸阵列以准确计算平均值? (有或没有numpy,事实证明)。

编辑:我正在使用64位系统,所以是的,这就是为什么重铸将它改为64位。事实证明,如果我对数据进行子集化(使用netCDF4 Dataset从netCDF输入中提取)我没有这个问题,较小的数组不会产生这个问题 - 因此它是由溢出引起的,所以切换到64位阻止了问题。
所以我还不清楚为什么它最初会以float32的形式加载,但我想它的目的是为了节省空间,即使它是一个64位系统。数组本身是1872x128x256,非掩码值大约为300,结果证明足以导致溢出:)

1 个答案:

答案 0 :(得分:0)

如果您正在使用大型阵列,请注意潜在的溢出问题!!
在这种情况下,从32位浮点数更改为64位浮点数可以避免导致异常mean计算的溢出(据我所知)。