我正在尝试使用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))]
答案 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
为您提供了Y
在a
中的位置的布尔数组:
array([False, True, True, True, True, False])
因此,通过对此数组建立索引,它只会选择True