Как проверить все ли элементы в массиве numpy одинаковые? Python

Дан массив:

import numpy as np

a = np.array([1, 0, 1, 1, 0])
[1 0 1 1 0]

Подскажите, пожалуйста, каким способом можно проверить одинаковые ли все элементы в массиве или нет?


Ответы (2 шт):

Автор решения: Pak Uula

np.all(a == a[0])

Выражение внутри скобок строит массив из значений True, если соответствующий элемент равен a[0], и False в противном случае. npa.all возвращает True если все элементы в этом массиве равны True.

Работает даже в случае многомерных массивов.

UPDATE

Сравнение производительности с решением из принятого ответа. Массив длиной 1 миллион элементов, в котором элемент на позиции 500_000 отличается от остальных. np.all оказался в 25+ раз быстрее, чем np.unique

Python 3.6.8 (default, Jan 14 2019, 11:02:34)
IPython 5.5.0 -- An enhanced Interactive Python.

In [1]: import numpy as np

In [2]: x = np.full(1000000, 1)

In [3]: x
Out[3]: array([1, 1, 1, ..., 1, 1, 1])

In [4]: x[500000]=0

In [6]: np.unique(x).size
Out[6]: 2

In [7]: %timeit np.unique(x).size
100 loops, best of 3: 9.26 ms per loop

In [8]: np.all(x == x[0])
Out[8]: False

In [9]: %timeit np.all(x == x[0])
1000 loops, best of 3: 420 µs per loop

In [10]: %timeit np.all(x == x[0])
1000 loops, best of 3: 414 µs per loop
→ Ссылка
Автор решения: strawdog

Еще один вариант (np.unique(array).size), который возвращает количество уникальных элементов массива (вне зависимости от размерности). Если это количество больше 1, то, очевидно, не все элементы одинаковы:

import numpy as np

a = np.array([1, 0, 1, 1, 0])
b = np.array([[1,1,0],[1,0,1]])
c = np.array([[1,1,1],[1,1,1]])

print(np.unique(a).size)
print(np.unique(b).size)
print(np.unique(c).size)

Соответственно, получим:

2
2
1
→ Ссылка