python - 检查数组是否是数组列表的元素

标签 python arrays numpy

我有 13 个 python NumPy 数组:

obj_1=np.array([784,785,786,787,788,789,790,791,792])
obj_2=np.array([716,717,718,730,731,732,721,722,724,726,727])
obj_3=np.array([658,659,660,661,662,663,664,665])
obj_4=np.array([581,582,583,589,590,591,595,597,598,599,601,605,606,613,614])
obj_5=np.array([533,534,535,536,537])
obj_6=np.array([464,469,472,474])
obj_7=np.array([406,409,411,412])
obj_8=np.array([345,346,347,349])
obj_9=np.array([277,278,281,282,283,284,288,296])
obj_10=np.array([217,219,220,223,224])
obj_11=np.array([154,155,156,157,158,159,160,161])
obj_12=np.array([91,92,93,94,95,96,97])
obj_13=np.array([28,29,30,31,32,33,34])

然后是下面的循环:

for i in [obj_1, obj_2, obj_3, obj_4, obj_5, obj_6, obj_7, obj_8, obj_9, obj_10, obj_11, obj_12, obj_13]:
    print i in [obj_1, obj_2, obj_3, obj_4, obj_5, obj_6, obj_7, obj_8, obj_9]

我期望这样的输出:

True
True
True
True
True
True
True
True
True
False
False
False
False

相反,我得到以下错误信息:

True
True
True
True
True
True
Traceback (most recent call last):

File "<ipython-input-221-c03c1ef308c6>", line 16, in <module>
print i in [obj_1, obj_2, obj_3, obj_4, obj_5, obj_6, obj_7, obj_8, obj_9]

ValueError: The truth value of an array with more than one element is ambiguous. Use  a.any() or a.all()

我测试了具有相同名称和相同for循环的不同数组;他们没有产生任何错误。

看来问题出在数组的内容上,但我想不出出在哪里。

有人知道为什么会这样吗?

最佳答案

当你执行 obj in list 时,python 比较 obj 与列表的每个成员是否相等。问题是 numpy 中的相等运算符的行为方式不一致。例如:

>>> obj_3 == obj_6
False

因为它们的长度不同,所以返回一个 bool 值。

>>> obj_7==obj_6
array([False, False, False, False], dtype=bool)

因为它们具有相同的长度,所以数组按元素进行比较并返回一个 numpy 数组。在这种情况下,真值是不确定的。看起来这种奇怪的行为是要change in the future .

正确的做法是使用例如 numpy.array_equal 单独比较每对数组:

for i in [obj_1, obj_2, obj_3, obj_4, obj_5, obj_6, obj_7, obj_8, obj_9, obj_10, obj_11, obj_12, obj_13]:
    print any(np.array_equal(i, j) for j in [obj_1, obj_2, obj_3, obj_4, obj_5, obj_6, obj_7, obj_8, obj_9])

让你:

True
True
True
True
True
True
True
True
True
False
False
False
False

关于python - 检查数组是否是数组列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27696763/

相关文章:

c - 将字符串分配给某物

python - 根据 Pandas Dataframe 中的条件将两列相乘?

python - 如何从 numpy 矩阵中删除 nan 和 inf 值?

python - 应用于图像列表的 np.array 和 np.stack 之间有什么区别

python - Ansible:委托(delegate)给时更改python解释器

Python Web Scraping 表返回 None

python - SciPy 中 10j 的值是多少?

python - 使用 OpenCV 检测 python 中的畸形 Blob

javascript - 根据每个值的内容过滤掉 JSON 数组

arrays - 如何将一个集合分成两个子集,使得两个集合中的数字之和之间的差异最小?