我有一个numpy数组的列表(用作堆栈)。现在我想检查一个数组是否已经在列表中。例如,如果它是元组,我只会写一些等同于(1,1) in [(1,1),(2,2)]
的东西。但是,这对于numpy数组不起作用; np.array([1,1]) in [np.array([1,1]), np.array([2,2])]
是一个错误(ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
)。这里的错误消息对AFAIK没有帮助,因为它指的是直接比较数组。
我很难相信它是不可能的,但我想有一些我不知道的东西。
答案 0 :(得分:23)
要测试列表a
中是否包含等于my_list
的数组,请使用
any((a == x).all() for x in my_list)
答案 1 :(得分:2)
如果您在堆栈中查找完全相同的数组实例,无论数据是否相同,那么您需要:
id(a) in map(id, my_list)
答案 2 :(得分:2)
any(a is x for x in mylist)
一个好处是,这将适用于所有类型的对象。
答案 3 :(得分:0)
您可以使用tolist()
将数组转换为列表,然后进行检查:
my_list = [[1,1], [2,2]]
print(np.array([1,1]).tolist() in my_list)
print(np.array([1,2]).tolist() in my_list)
答案 4 :(得分:0)
这个怎么样:
a = array([1, 1])
l = [np.array([1,1]), np.array([2,2])]
list(map(lambda x: np.array_equal(x, a), l)
[True, False]