Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打印小于特定值的三维数组的值?_Python_Loops_Indexing - Fatal编程技术网

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

Python 如何打印小于特定值的三维数组的值?,python,loops,indexing,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])) In [63]: print(data_low[0, 2, 113]) Out [63]: 1.74 这是它的形状:(84243,3) 我可以从以下数据集中获得降水量的唯一值: (arr

因此,我有一个名为data_low的数据集,如下所示:

(array([ 0,  0,  0, ..., 30, 30, 30]), array([  2,   2,   5, ..., 199, 199, 199]), array([113, 114,  64, ...,  93,  94,  96]))
In [63]: print(data_low[0, 2, 113])
Out [63]: 1.74
这是它的形状:(84243,3)

我可以从以下数据集中获得降水量的唯一值:

(array([ 0,  0,  0, ..., 30, 30, 30]), array([  2,   2,   5, ..., 199, 199, 199]), array([113, 114,  64, ...,  93,  94,  96]))
In [63]: print(data_low[0, 2, 113])
Out [63]: 1.74
我要做的是打印数据集中值小于3.86667的所有值。我对python非常陌生,不知道使用哪个循环来实现这一点。非常感谢你的帮助。谢谢

编辑:这是我目前的程序。在某些情况下,我使用ncecat组合了31个数据集,因此我有三个1D数组:第一个数组是天,第二个和第三个数组代表经度和纬度

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])
data\u path=r“C:\Users\matth\Downloads\TRMM\u 3B42RT\3B42RT\u Daily.201001.7.nc4”
f=数据集(数据路径)
latbounds=[-38,-20]
lonbounds=[115145]#东经?
lats=f.变量['lat'][:]
lons=f.variables['lon'][:]
#纬度上下指数
latli=np.argmin(np.abs(lats-latbounds[0]))
latui=np.argmin(np.abs(lats-latbounds[1]))
#经度上下索引
lonli=np.argmin(np.abs(lons-lonbounds[0]))
lonui=np.argmin(np.abs(lons-lonbounds[1]))
precip_subset=f.变量[‘降水量][:,lonli:lonui,latli:latui]
打印(精确子集形状)
打印(精确子集大小)
打印(np.平均值(精确子集))
数据低=np.非零((精度子集>0)和(精度子集<3.86667))
打印(数据量低)
x=列表(zip(*数据低))[:]
xx=np.数组(x)
印刷品(xx.形状)
印刷品(xx.尺寸)
对于范围内的i(084243,1):
打印(数据量低[i,i,i])
输出:

[136]中的
:%运行“C:\Users\matth\precip\u.py”
(31, 120, 72)
267840
1.51398
(数组([0,0,0,…,30,30,30]),数组([7,7,7,…,119,119,
数组([9,10,11,…,23,53,54]))
(13982, 3)
41946
[ 0  0  0 ..., 30 30 30]
TypeErrorTraceback(最近一次呼叫上次)
C:\Users\matth\precip\u.py in()
53
54表示范围内的i(084243,1):
--->55打印(数据量低[i,i,i])
TypeError:元组索引必须是整数,而不是元组

鉴于
数据\u low
是一个numpy矩阵(根据您的问题,它不是一个三元组,有三个数组),您可以使用掩蔽:

data_low[data_low < 3.86667]
data_low[数据_low<3.86667]
这将返回一个1D numpy数组,其中包含所有小于3.86667的值

如果您希望将这些作为常规Python列表,可以使用:

list(data_low[data_low < 3.86667])
列表(数据低[数据低<3.86667])

但是如果你想做进一步的处理(在numpy中),你最好还是使用numpy数组。

这看起来不像是一个具有形状
84243x3
的数组,而是一个具有三个1d数组的三元组。你想如何打印它们?只是在一个长的列表中,或者在它们的索引中,或者在某种程度上剩余的单元格中“空白”?我使用list(zip(*data_low))[:]并将其创建到一个numpy数组中。在那之后,我找到了大小,它是(84243,3),我想做一些类似于“对于范围内的i(084243,1):打印(数据低[[i],[i],[i]]),但我一直收到一个错误,说我需要整数值,为什么用
[i]
而不是
i
(比如
打印(数据低[i,i,i])
)?此外,你最好尽量减少Python级别的调用次数,因为numpy效率更高。当我这样做时,它会给我一个错误:“元组索引必须是整数,而不是元组”@MatthewKim:你能用一个复制错误的程序更新你的问题吗?我在上面发布了它