获取具有三个1D numpy数组的数据集中的值的位置

时间:2017-07-31 19:31:14

标签: python numpy indexing

我有一个数据集precip_subset,它有三个1D numpy数组。我合并了31个数据集以创建precip_subset:数据集中的第一个numpy arrray表示日期,第二个数组表示经度,thrid数组表示纬度。数据集中的每个位置都有一个独特的降水值;例如,print(precip_subset[1, 0, 21])会给我一个1.05的值。

precip_subset中,我只想要具体的降水值。所以我像这样限制了数据集:

 data_low = precip_subset[(precip_subset > 0) & (precip_subset < 3.86667)]

在此之后,我尝试这样做:

for val in data_low:
    if val < 1:
        print(precip_subset.tolist().index(val))

我要做的是获取原始数据集中precip_subset的值的位置。但是,我收到The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()的错误。任何人都可以解释我如何从precip_subset获得值的位置?

编辑:以下是创建了sedi_subset的方法:

from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

data_path = r"C:\Users\matth\Downloads\TRMM_3B42RT\3B42RT_Daily.201001.7.nc4"
f = Dataset(data_path)

latbounds = [ -31 , -19 ]
lonbounds = [ 131, 146 ] # degrees east ? 
lats = f.variables['lat'][:] 
lons = f.variables['lon'][:]

# latitude lower and upper index
latli = np.argmin( np.abs( lats - latbounds[0] ) )
latui = np.argmin( np.abs( lats - latbounds[1] ) ) 

# longitude lower and upper index
lonli = np.argmin( np.abs( lons - lonbounds[0] ) )
lonui = np.argmin( np.abs( lons - lonbounds[1] ) )

precip_subset = f.variables['precipitation'][ : , lonli:lonui , latli:latui ]

变量“降水”来自原始数据集r"C:\Users\matth\Downloads\TRMM_3B42RT\3B42RT_Daily.201001.7.nc4"

此外,precip_subset的形状和大小分别为(31, 60, 48)89280

1 个答案:

答案 0 :(得分:0)

你可以尝试以下方法(假设我从你的例子中得到了正确的想法):

data_low_indices1 = np.where((precip_subset > 0) & (precip_subset < 3.86667))

这将返回条件成立的一维索引数组的元组。您可能想要转置此列表:

data_low_indices2 = np.array(np.where((precip_subset > 0) & (precip_subset < 3.86667))).T

然后你可以:

for ind in data_low_indices2:
    print(ind)

如果您不想转置,请执行以下操作:

for ind in zip(*data_low_indices1):
    print(ind)