Сравнение элементов массивов NumPy в Python - PullRequest
3 голосов
/ 08 июля 2011

Я хочу сравнить два массива 1x3, таких как:

if output[x][y] != [150,25,75]

(output здесь 3x3x3, поэтому output[x][y] - это только 1x3).

Я получаюошибка, которая говорит:

ValueError: The truth value of an array with more than one element is ambiguous. 

Значит ли это, что мне нужно сделать это следующим образом:

if output[y][x][0] == 150 and output[y][x][1] == 25 and output[y][x][2] == 75:

или есть более чистый способ сделать это?

Iиспользую Python v2.6

Ответы [ 4 ]

7 голосов
/ 08 июля 2011

Единственный способ - использовать np.allclose :

np.allclose(a,b)

Хотя для целых чисел

not (a-b).any()

быстрее.

4 голосов
/ 08 июля 2011

Вы также должны получить сообщение:

Используйте a.any () или a.all ()

Это означает, что вы можете делать следующее:

if (output[x][y] != [150,25,75]).all():

Это потому, что сравнение 2 массивов или массива со списком приводит к логическому массиву. Что-то вроде:

array([ True,  True,  True], dtype=bool)
3 голосов
/ 08 июля 2011

преобразовать в список:

if list(output[x][y]) != [150,25,75]
0 голосов
/ 08 июля 2011

вы можете попробовать:

a = output[x][y]
b = [150,25,75]

if not all([i == j for i,j in zip(a, b)]):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...