Arrays 如何为多维NumPy数组创建布尔索引数组?

Arrays 如何为多维NumPy数组创建布尔索引数组?,arrays,numpy,indexing,Arrays,Numpy,Indexing,我在看这个问题: 我有一个类似的问题,但是在二维数组中,几个坐标和值存储在一个NumPy数组的行中。我怎样才能像上面的问题一样进行类似的过滤 我的数据如下所示: >>> A.shape (4269862, 5) >>> A[0] array([ 2.27011719e+02, 0.00000000e+00, 2.88134766e+02, 2.00000000e+00, 7.69880000e+04], dtype=float

我在看这个问题:

我有一个类似的问题,但是在二维数组中,几个坐标和值存储在一个NumPy数组的行中。我怎样才能像上面的问题一样进行类似的过滤

我的数据如下所示:

>>> A.shape
(4269862, 5)

>>> A[0]
array([  2.27011719e+02,   0.00000000e+00,   2.88134766e+02,
         2.00000000e+00,   7.69880000e+04], dtype=float32)

这些值对应于X,Y,Z,值1和值2。我想要的是有效地获得例如X在300--400,Y在200--250,Z在200--300的所有行。

您可以创建一个布尔掩码,当满足所有条件时,该掩码将为真:

idx = ((A[:, 0] > 300) & (A[:, 0] < 400) & 
       (A[:, 1] > 200) & (A[:, 1] < 250) & 
       (A[:, 2] > 200) & (A[:, 2] < 300))

print A[idx]   
# this should give your array rows where idx is True
idx=((A[:,0]>300)和(A[:,0]<400)和
(A[:,1]>200)和(A[:,1]<250)和
(A[:,2]>200)和(A[:,2]<300))
打印[idx]
#这将给出idx为真的数组行
您可以测试以下内容:

A = np.random.uniform(150, 500, (200, 5)).astype('i')
idx = ((A[:, 0] > 300) & (A[:, 0] < 400) & 
       (A[:, 1] > 200) & (A[:, 1] < 250) & 
       (A[:, 2] > 200) & (A[:, 2] < 300))
print A[idx]
#[[339 292 231 211 474]
# [371 252 310 281 256]
# [337 263 471 159 397]
# [361 299 383 250 206]
# [360 278 328 194 453]
# [360 258 205 245 427]
# [339 286 331 175 418]]
A=np.random.uniform(150500,(2005)).astype('i'))
idx=((A[:,0]>300)和(A[:,0]<400)和
(A[:,1]>200)和(A[:,1]<250)和
(A[:,2]>200)和(A[:,2]<300))
打印[idx]
#[[339 292 231 211 474]
# [371 252 310 281 256]
# [337 263 471 159 397]
# [361 299 383 250 206]
# [360 278 328 194 453]
# [360 258 205 245 427]
# [339 286 331 175 418]]

您可以创建一个布尔掩码,当满足所有条件时,该掩码将为真:

idx = ((A[:, 0] > 300) & (A[:, 0] < 400) & 
       (A[:, 1] > 200) & (A[:, 1] < 250) & 
       (A[:, 2] > 200) & (A[:, 2] < 300))

print A[idx]   
# this should give your array rows where idx is True
idx=((A[:,0]>300)和(A[:,0]<400)和
(A[:,1]>200)和(A[:,1]<250)和
(A[:,2]>200)和(A[:,2]<300))
打印[idx]
#这将给出idx为真的数组行
您可以测试以下内容:

A = np.random.uniform(150, 500, (200, 5)).astype('i')
idx = ((A[:, 0] > 300) & (A[:, 0] < 400) & 
       (A[:, 1] > 200) & (A[:, 1] < 250) & 
       (A[:, 2] > 200) & (A[:, 2] < 300))
print A[idx]
#[[339 292 231 211 474]
# [371 252 310 281 256]
# [337 263 471 159 397]
# [361 299 383 250 206]
# [360 278 328 194 453]
# [360 258 205 245 427]
# [339 286 331 175 418]]
A=np.random.uniform(150500,(2005)).astype('i'))
idx=((A[:,0]>300)和(A[:,0]<400)和
(A[:,1]>200)和(A[:,1]<250)和
(A[:,2]>200)和(A[:,2]<300))
打印[idx]
#[[339 292 231 211 474]
# [371 252 310 281 256]
# [337 263 471 159 397]
# [361 299 383 250 206]
# [360 278 328 194 453]
# [360 258 205 245 427]
# [339 286 331 175 418]]

谢谢,A[:,0]是我想不出来的。谢谢,A[:,0]是我想不出来的。