Numpy: как я могу определить, все ли элементы массива numpy равны числу

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

Мне нужно знать, все ли элементы массива numpy равны числу

Это было бы похоже:

 numbers = np.zeros(5) # array[0,0,0,0,0]
print numbers.allEqual(0) # return True because all elements are 0
  

Я могу создать алгоритм, но в библиотеке реализован какой-то метод numpy ?

Ответ №1:

Вы можете разбить это на np.all() , который принимает логический массив и проверяет все True это, и сравнение на равенство:

 np.all(numbers == 0)
# or equivalently
(numbers == 0).all()
  

Комментарии:

1. или используйте встроенный: all(numbers==0)

2. @bebop: что медленнее

Ответ №2:

Если вы хотите сравнить значения с плавающей запятой, используйте np.isclose вместо:

 np.all(np.isclose(numbers, numbers[0]))
  

Ответ №3:

np.array_equal() также работает (для Python 3).

 tmp0 = np.array([0]*5)
tmp1 = np.array([0]*5)

np.array_equal(tmp0, tmp1)
  

ВОЗВРАТ True

Комментарии:

1. Это хорошо, но это излишне создает копию массива.

Ответ №4:

Следующая версия проверяет равенство всех элементов массива, не требуя повторяющегося числа.

 numbers_0 = np.zeros(5) # array[0,0,0,0,0]
numbers.ptp() == 0.0  # True

# checking an array having some random repeating entry
numbers_r = np.ones((10, 10))*np.random.rand()
numbers_r.ptp() == 0.0  # True
  

Ответ №5:

Необходимы ли методы numpy? Если все элементы равны числу, то все элементы одинаковы. Вы могли бы сделать следующее, что использует преимущества короткого замыкания.

 numbers[0] == 0 and len(set(numbers)) == 1 
  

Этот способ быстрее, чем использование np.all()

Комментарии:

1. Я очень сомневаюсь, что создание хеш-таблицы массива, поиск и вставка каждого элемента массива numpy, которые должны извлекаться по отдельности через весь стек вызовов numpy python) будет быстрее, чем создание логической маски в numpy, а также короткая проверка всего этого массиваполностью в numpy. Некоторые timeit или графики масштабирования вашего решения по сравнению с numpy могут быть в порядке. len(set(numbers)) это вообще не короткое замыкание, ему нужно хэшировать и сравнивать каждое значение с существующим набором.