Как проверить все ли элементы в массиве numpy одинаковые? Python
Дан массив:
import numpy as np
a = np.array([1, 0, 1, 1, 0])
[1 0 1 1 0]
Подскажите, пожалуйста, каким способом можно проверить одинаковые ли все элементы в массиве или нет?
Ответы (2 шт):
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
Еще один вариант (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