1

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

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)应该如何实现这样的元素检查?

4

1 回答 1

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 数组列表的原因是什么?

于 2013-10-11T07:50:08.700 回答