使用np.where从子数组中查找元素

时间:2018-11-17 00:04:33

标签: python numpy

我正在尝试使用np.where()查找数组X中与数组Y上的元素匹配的所有元素,并且where()函数的条件是比较列表(a)而不是一个元素。请查看以下代码:

X = np.array([[0, 2], [2, 1], [1, 3], [5, 9], [6, 7], [4, 6]])
Y = np.array([1, 2, 3, 4, 4, 5])
a = [2, 3, 4]
matchedX = X[np.where(Y == a)]

我期望得到这样的结果:

array([[2, 1],
   [1, 3],
   [5, 9],
   [6, 7]])

但是我得到了不同的结果:

array([], shape=(0, 2), dtype=int64)

因此,如果我不知道a的值,我需要一种替代的解决方案,使我可以获得相同的元素?下面的这一行为我提供了我想要的确切结果,但是我以前并不知道a值。

matchedX = X[np.where((Y == 2) | (Y==3) | (Y==4))]

2 个答案:

答案 0 :(得分:1)

您可以使用numpy的设置功能:

X[np.where(np.isin(Y, a))]

array([[2, 1],
       [1, 3],
       [5, 9],
       [6, 7]])

答案 1 :(得分:1)

您可以跳过np.where(在这里是多余的),而只需使用np.isin进行索引:

X[np.isin(Y,a)]

array([[2, 1],
       [1, 3],
       [5, 9],
       [6, 7]])

这是因为np.isin为您提供了Ya中的位置的布尔数组:

array([False,  True,  True,  True,  True, False])

因此,通过对此数组建立索引,它只会选择True