2

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

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

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

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

编辑:我使用的是 64 位系统,所以是的,这就是重铸将其更改为 64 位的原因。事实证明,如果我对数据进行子集化(使用从 netCDF 输入中提取netCDF4 Dataset),则没有这个问题,较小的数组不会产生这个问题 - 因此它是由溢出引起的,因此切换到 64 位可以防止这个问题。
所以我仍然不清楚为什么它最初会加载为 float32,但我猜它旨在节省空间,即使它是 64 位系统。数组本身是1872x128x256300 左右的非屏蔽值,事实证明这足以导致溢出 :)

4

1 回答 1

0

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

于 2014-04-11T01:49:51.070 回答