如何找到不包括零的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数组的最小值的主要内容,如果未能解决你的问题,请参考以下文章