如何找到不包括零的netCDF数组的最小值

Posted

技术标签:

【中文标题】如何找到不包括零的netCDF数组的最小值【英文标题】:How to find the minimum value of netCDF array excluding zero 【发布时间】:2015-08-01 18:25:59 【问题描述】:

我正在使用 Python 2,并处理 netcdf 数据。

这个数组是一个叫做云水混合比的变量,它是 WRF 气候模型的输出,有 4 个维度:

QC(time (25), vertical level (69), latitude (119), longitude (199))

我正在尝试获取此数组中值的最小值。通过使用 NCVIEW 可视化的初步分析,我发现最小值约为 1x10-5,最大值为 1x10-3。

我用过

var = fh.variables['QC']
var[:].max()
var[:].min()

最大值工作正常,但最小值给我 0.0。

然后我尝试了here的解决方案,即

var[var>0].min()

但我也得到零。然后我意识到上面的代码适用于带有负数的数组,而我的没有负数。

我尝试到处寻找解决方案,但没有找到适合我情况的解决方案。请,如果有人能指出我正确的方向,我将不胜感激。 谢谢。

【问题讨论】:

qc[qc!=0].min() 可能是? 无法重现您的错误刚刚尝试过 A=np.array((1e-10,0)) print A[A>0].min() >>1e-10 ir 实际上返回零还是只打印零? 嗨@JohnGalt,我也试过了。也不行。 嗨@JoãoAbrantes 我试过你的代码,但它给了我 1e-10 而不是数据中的实际最小值。也许我的描述在问题中不清楚。使用ncview查看netcdf数据,发现最小值为0.00009306,但这只是部分数据。我希望能够运行整个域以获取最低值,因此我尝试使用 Python 来获取它。 【参考方案1】:

很抱歉无法发布数据,因为我没有共享数据的权限。我尝试创建一个与数据相似的随机 4d 数组,并使用了你们提供的所有解决方案,尤其是 @Joao Abrantes 提供的解决方案,它们似乎都工作正常。所以我想也许数据有问题。

幸运的是,数据没有问题。我和我的朋友讨论过这个问题,我们终于找到了解决方案。

解决办法是

qc[:][qc[:]>0].min()

我必须在变量之后指定 [:] 而不仅仅是这样做

qc[qc>0].min()

还有另一种方式,就是将数组指定为numpy数组,因为,qc = fh.variables['QC'] 返回一个 netCDF4.Variable。通过添加第二行qc2 = qc[:],就变成了numpy.ndarray。

qc = fh.variables['QC']
qc2 = qc[:]      # create numpy array
qc2[qc2>0].min()

如果我昨天发布的问题不清楚,我很抱歉。因为我今天才知道这一点。

【讨论】:

【参考方案2】:

var[var>0].min是一个函数,需要用()调用

var[var>0].min() 应该会更好

【讨论】:

嗨@firelynx 谢谢你,我实际上在我的脚本中使用了第二个(它没有工作),但我忘了在这里输入括号。我已经编辑了我的问题。

以上是关于如何找到不包括零的netCDF数组的最小值的主要内容,如果未能解决你的问题,请参考以下文章

如何在数组中找到最小值,不包括第一个索引

MATLAB如何取数组中非零的最小值,数组里面都是正数。

返回零的最小值[重复]

最小值索引,不包括负值

找出四个矩阵中对应元素的最小值

如何找到 ArrayList 的最小值?