如何打印小于特定值的三维数组的值?

时间:2017-07-28 15:27:05

标签: python loops indexing

所以我有一个名为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

1 个答案:

答案 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数组。