Numpy.Array在Python列表中?

时间:2011-03-30 15:17:15

标签: python numpy

我有一个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没有帮助,因为它指的是直接比较数组。

我很难相信它是不可能的,但我想有一些我不知道的东西。

5 个答案:

答案 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)

如果你想比较数组的实际内容,那么Sven的答案是正确的选择。如果您只想检查列表中是否包含相同的实例,可以使用

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]