我有一个输入数组,它是一个蒙版数组 当我检查平均值时,我得到一个荒谬的数字:小于报告的最小值!
所以,原始数组:numpy.mean(A) < numpy.min(A)
。注意A.dtype
会返回float32
。
FIX:A3=A.astype(float)
。 A3仍然是一个蒙面阵列,但现在平均值介于最小值和最大值之间,所以我有一些信念它是正确的!由于某种原因,A3.dtype
为float64
。为什么??为什么会改变它,为什么它在64位时是正确的并且在32位时非常不正确?
任何人都可以解释为什么我需要来重铸阵列以准确计算平均值? (有或没有numpy,事实证明)。
编辑:我正在使用64位系统,所以是的,这就是为什么重铸将它改为64位。事实证明,如果我对数据进行子集化(使用netCDF4 Dataset
从netCDF输入中提取)我没有这个问题,较小的数组不会产生这个问题 - 因此它是由溢出引起的,所以切换到64位阻止了问题。1872x128x256
,非掩码值大约为300,结果证明足以导致溢出:)
答案 0 :(得分:0)
如果您正在使用大型阵列,请注意潜在的溢出问题!!
在这种情况下,从32位浮点数更改为64位浮点数可以避免导致异常mean
计算的溢出(据我所知)。