0

我在看这个问题:Efficient thresholding filter of an array with numpy

我有一个类似的问题,但是有一个二维数组,其中几个坐标和值存储在 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 和 value1 和 value2。我想要的是有效地获得例如。X 在 300--400、Y 在 200--250 和 Z 在 200--300 的所有行。

4

1 回答 1

4

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

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

您可以对此进行测试:

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]]
于 2013-06-22T16:22:50.793 回答