Сравнение массива numpy module со списком

Я пытаюсь сравнить массив numpy со списком.... Поскольку я новичок в python, я не знаю о массиве numpy. Я хочу знать приложение массива numpy. Помогите понять массив numpy.

>>> from numpy import *
>>> res1 = []
>>> res2 = array([])
>>> if res1 == res2:
... print 'hi'
... else:
... print 'bye'
... 
bye

>>> res1 = [1]
>>> res2 = array([1])
>>> if res1 == res2:
... print 'hi'
... else:
... print 'bye'
... 
hi
>>> res1 = [1,2]
>>> res2 = array([1, 2])
>>> if res1 == res2:
... print 'hi'
... else:
... print 'bye'
... 
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
</module></stdin>

Любой, пожалуйста, помогите, почему я получаю ошибку значения

2 ответа

Сравнение res1 == res2 создает новый массив логических элементов, которые представляют элементарное сравнение содержимого списка и массива:

>>> res1 == res2
array([ True, True], dtype=bool)

Как сообщает сообщение об ошибке, вы не можете напрямую назначить значение истины для массива, поэтому вам нужно проверить, all ли объекты True:

>>> np.all(res1 == res2)
True

Это происходит только потому, что ваш список и массив имеют одинаковую форму:

>>> a = np.array([1, 2, 3])
>>> b = [3, 2]
>>> a == b
False

Обратите внимание, что я использовал import numpy as np, from numpy import * all numpy import numpy as np, а не from numpy import * - это значит, что я не отменяю, например, встроенное all с numpy версии.


Вы можете использовать numpy.array_equal(a1, a2) для сравнения буксировочного numpy массива!

Истинно, если два массива имеют одинаковую форму и элементы, False в противном случае.

DEMO:

>>> np.array_equal(np.array([1, 2]), np.array([1, 2]))
True
>>> np.array_equal([1, 2], [1, 2, 3])
False

licensed under cc by-sa 3.0 with attribution.