在两种情况下都返回 True,当它包含一个元素时,当它不包含元素时。为什么?

True returned in both cases, when it contains an element and when not. Why?

假设我创建了一个整数二维数组:

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 的元素。 'elements' 我的意思是 'rows':

v1 in ar1
v2 in ar1

我在这两种情况下都得到 True。我究竟做错了什么?有没有更好的方法来检查向量是否匹配数组的一行?循环遍历行(即 for rows in ar1:)不是一种选择。

编辑:另一种方法是对每一行中的匹配值求和并检查总和是否为 2,但它很蹩脚且不符合 pythonic

如果它们是列表而不是 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

您可以将 np.anynp.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)
>>>