我有一个数据集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
答案 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)