所以我有一个名为data_low的数据集,如下所示:
(array([ 0, 0, 0, ..., 30, 30, 30]), array([ 2, 2, 5, ..., 199, 199, 199]), array([113, 114, 64, ..., 93, 94, 96]))
这就是它的形状:(84243,3)。
我可以从数据集中获得一个独特的降水值,如下所示:
In [63]: print(data_low[0, 2, 113])
Out [63]: 1.74
我要做的是打印数据集中值小于3.86667的所有值。我对python很陌生,并且真的不知道要使用哪个循环。非常感谢帮助。感谢。
编辑:这是我目前的程序。对于某些上下文,我使用ncecat来组合31个数据集,这就是为什么我有三个一维数组:第一个数组是日,第二个和第三个数字代表经度和纬度。data_path = r"C:\Users\matth\Downloads\TRMM_3B42RT\3B42RT_Daily.201001.7.nc4"
f = Dataset(data_path)
latbounds = [ -38 , -20 ]
lonbounds = [ 115 , 145 ] # 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 ]
print(precip_subset.shape)
print(precip_subset.size)
print(np.mean(precip_subset))
data_low = np.nonzero((precip_subset > 0) & (precip_subset < 3.86667))
print(data_low)
x = list(zip(*data_low))[:]
xx = np.array(x)
print(xx.shape)
print(xx.size)
for i in range(0,84243,1):
print(data_low[i, i, i])
OUT:
In [136]: %run "C:\Users\matth\precip_anomalies.py"
(31, 120, 72)
267840
1.51398
(array([ 0, 0, 0, ..., 30, 30, 30]), array([ 7, 7, 7, ..., 119, 119,
119]), array([ 9, 10, 11, ..., 23, 53, 54]))
(13982, 3)
41946
[ 0 0 0 ..., 30 30 30]
TypeErrorTraceback (most recent call last)
C:\Users\matth\precip_anomalies.py in <module>()
53
54 for i in range(0,84243,1):
---> 55 print(data_low[i, i, i])
TypeError: tuple indices must be integers, not tuple
答案 0 :(得分:1)
鉴于data_low
是一个numpy矩阵(基于你的问题不是,它是一个有三个数组的3元组),你可以使用掩码:
data_low[data_low < 3.86667]
这将返回包含所有小于3.86667的值的1D numpy数组。
如果你想将这些作为一个vanilla Python列表,你可以使用:
list(data_low[data_low < 3.86667])
但是如果你想进一步处理(numpy)你最好还是使用numpy数组。