假设我创建了一个整数2d数组:
import numpy as np
ar1 = np.random.randint(10, size=(4,2))
v1 = ar1[0]
v2 = [4,4]
ar1 = np.array([[5, 7],
[7, 5],
[9, 2],
[0, 1]])
我想检查v1和v2是否是ar1的元素。 “元素”我的意思是“行”:
v1 in ar1
v2 in ar1
在这两种情况下我得到True
。我究竟做错了什么?有没有更好的方法来检查向量是否匹配数组的行?循环遍历行(即for rows in ar1:
)不是一种选择。
编辑:另一种方法是在每一行中对匹配值求和并检查总和是否为2,但它是跛脚和unpythonic
答案 0 :(得分:2)
您可以将np.any
与np.all
一起使用条件。您要检查的行必须为broadcastable - Array Broadcasting in numpy。
import numpy as np
v1 = np.array([9,2])
v2 = np.array([2,9])
v3 = np.array([9,4])
ar1 = np.array([[5, 7],
[7, 5],
[9, 2],
[0, 1]])
>>> ar1 == v1
array([[False, False],
[False, False],
[ True, True],
[False, False]], dtype=bool)
>>> ar1 == v2
array([[False, False],
[False, False],
[False, False],
[False, False]], dtype=bool)
>>> ar1 == v3
array([[False, False],
[False, False],
[ True, False],
[False, False]], dtype=bool)
>>> np.any(np.all(ar1 == v1 , axis = 1)), np.any(np.all(ar1 == v2, axis = 1)), np.any(np.all(ar1 == v3, axis = 1))
(True, False, False)
>>>
答案 1 :(得分:1)
如果它们是列表而不是numpy数组,那么这将有效。
ar1 = np.array([[5, 7],
[7, 5],
[9, 2],
[0, 1]])
[7, 5] in ar1 ## True
[7, 6] in ar1 ## True
[7, 5] in ar1.tolist() ## True
[7, 6] in ar1.tolist() ## False