Numpy.Array в списке Python? - PullRequest
       16

Numpy.Array в списке Python?

12 голосов
/ 30 марта 2011

У меня есть список (используемый в качестве стека) массивов 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 ]

23 голосов
/ 30 марта 2011

Чтобы проверить, содержится ли в списке массив, равный a, my_list, используйте

any((a == x).all() for x in my_list)
2 голосов
/ 11 июля 2013

Ответ Свена - правильный выбор, если вы хотите сравнить фактическое содержимое массивов. Если вы хотите только проверить, содержится ли тот же экземпляр в списке, вы можете использовать

any(a is x for x in mylist)

Одним из преимуществ является то, что это будет работать для всех видов объектов.

2 голосов
/ 30 марта 2011

Если вы ищете один и тот же экземпляр массива в стеке, независимо от того, совпадают ли данные, то вам необходимо:

id(a) in map(id, my_list)
0 голосов
/ 19 января 2018

Что по этому поводу:

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]
0 голосов
/ 28 апреля 2017

Вы можете преобразовать массив в список, используя 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...