我有一个包含不同长度数组的列表,并想检查某些数组是否在列表中。这样的检查例如是
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)如何实现这样的元素检查呢?
答案 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数组列表的原因是什么?