#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))
это вообще не короткое замыкание, ему нужно хэшировать и сравнивать каждое значение с существующим набором.