我有一个输入数组,它是一个掩码数组。
当我检查平均值时,我得到一个无意义的数字:小于报告的最小值!
所以,原始数组:numpy.mean(A) < numpy.min(A)
. 注意A.dtype
返回float32
。
修复:A3=A.astype(float)
。A3 仍然是一个掩码数组,但现在平均值介于最小值和最大值之间,所以我相信它是正确的!现在由于某种原因A3.dtype
是float64
。为什么??为什么会改变它,为什么它在 64 位是正确的,而在 32 位是完全不正确的?
任何人都可以解释为什么我需要重铸阵列以准确计算平均值吗?(事实证明,有或没有 numpy)。
编辑:我使用的是 64 位系统,所以是的,这就是重铸将其更改为 64 位的原因。事实证明,如果我对数据进行子集化(使用从 netCDF 输入中提取netCDF4 Dataset
),则没有这个问题,较小的数组不会产生这个问题 - 因此它是由溢出引起的,因此切换到 64 位可以防止这个问题。
所以我仍然不清楚为什么它最初会加载为 float32,但我猜它旨在节省空间,即使它是 64 位系统。数组本身是1872x128x256
300 左右的非屏蔽值,事实证明这足以导致溢出 :)