询问长度为2的数组列表是否包含给定的长度为1的数组时的ValueError

时间:2013-10-11 07:28:29

标签: python arrays list numpy

我有一个包含不同长度数组的列表,并想检查某些数组是否在列表中。这样的检查例如是

from numpy import array
array([0]) in [array([0]), array([1,2])]
>>> True

但是,如果列表只包含长度大于要检查的元素的数组,则会出现此错误

array([0]) in [array([1,2])]
>>> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

现在,我的问题是(a)有人可以帮我理解这个问题吗?(b)如何实现这样的元素检查呢?

1 个答案:

答案 0 :(得分:1)

如果交换元素,即使列表包含目标数组,也会收到错误:

>>> array([0]) in [array([1,2]), array([0])]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any
() or a.all()

array([0]) in [array([0]), array([1,2])]的原始示例中,第二个元素从未经过测试,因为第一个元素通过了相等测试。

你可以通过首先限制正确形状的元素来解决这个问题:

>>> arrs =  [array([0]), array([1,2])]
>>> array([0]) in [a for a in arrs if a.shape == (1,)]
True
>>> arrs =  [array([1,2]), array([0])]
>>> array([0]) in [a for a in arrs if a.shape == (1,)]
True
>>> 

但是,如果您可以更多地解释一下您的设置和数据示例,我们可以向您展示更好,更快的NumPy方式。你有一个NumPy数组列表的原因是什么?