Чтобы разделить массив NumPy на скаляр в Python, мы можем использовать оператор / для простого поэлементного деления или numpy.divide для дополнительного контроля над операцией. Обработка деления на ноль достигается с помощью numpy.seterr. NumPy также поддерживает поэлементное деление с трансляцией для массивов различной формы и деление на месте с использованием оператора /=.
- 1. Используя оператор /
- 2. С помощью np.divide()
- 3. С делением на ноль
- 4. Поэлементно с трансляцией
- 5. С делением на месте
- Что такое np.divide vs/?
1. Используя оператор /
Самый простой способ разделить массив NumPy на скаляр в Python — использовать оператор деления /. Когда мы используем этот оператор, каждый элемент массива делится на скалярное значение. Эта операция векторизована, то есть эффективно реализована для работы с массивами любого размера.
Вот пример:
import numpy as np populations = np.array([8.4, 3.9, 2.7, 2.3, 1.7]) result = populations / 2 print(result)
Выход:
[4.2 1.95 1.35 1.15 0.85]
Ниже показан снимок экрана, на котором запечатлен результат выполнения кода в редакторе PyCharm.
2. С помощью np.divide()
Функция np.divide также может использоваться при делении массива NumPy на скаляр в Python. Это особенно полезно, когда нам нужен дополнительный контроль над операцией, например, указание типа выходных данных.
Вот базовый пример, иллюстрирующий, как это работает:
import numpy as np temperatures = np.array([68, 75, 59, 85, 72]) result = np.divide(temperatures, 2) print(result)
Выход:
[34. 37.5 29.5 42.5 36. ]
Результат запуска кода в PyCharm визуально представлен на снимке экрана ниже.
3. С делением на ноль
Когда NumPy делит массив на скаляр в Python, существует потенциальный риск деления на ноль, что может вызвать ошибку или привести к значениям inf или nan. Чтобы справиться с этим, мы можем использовать numpy.seterr для управления тем, как NumPy обрабатывает такие ошибки.
Например:
import numpy as np rainfall = np.array([49.9, 14.8, 36.9, 49.8, 8.2]) np.seterr(divide='ignore') result = rainfall / 0 print(result)
Выход:
[inf inf inf inf inf]
На снимке экрана ниже показан результат, полученный при запуске кода в редакторе PyCharm.
4. Поэлементно с трансляцией
В NumPy мы также можем делить массивы разной формы с помощью трансляции. Например, если у нас есть 2D-массив и скаляр, NumPy автоматически транслирует скаляр в соответствии с формой массива.
Например:
import numpy as np distances = np.array([[0, 2446, 713, 1625, 2298], [2446, 0, 1745, 1374, 372], [713, 1745, 0, 925, 1447]]) result = distances / 2 print(result)
Выход:
[[ 0. 1223. 356.5 812.5 1149. ] [1223. 0. 872.5 687. 186. ] [ 356.5 872.5 0. 462.5 723.5]]
Ниже показано изображение, отображающее результаты выполнения кода в среде PyCharm.
5. С делением на месте
Для повышения эффективности использования памяти мы можем захотеть выполнить операцию деления на месте, изменив исходный массив. Это можно сделать с помощью оператора /=.
Например:
import numpy as np gdp_growth = np.array([2.5, 3.1, 2.8, 3.6, 3.0]) gdp_growth /= 2 print(gdp_growth)
Выход:
[1.25 1.55 1.4 1.8 1.5 ]
На следующем изображении показаны результаты, полученные в результате выполнения кода в PyCharm.
Что такое np.divide vs/?
Ниже приведена таблица, сравнивающая np.divide и оператор / для деления массива в Python, особенно с использованием NumPy. Оба метода обычно используются для разделения массивов, но они имеют некоторые различия с точки зрения функциональности и использования.
Аспект | np.divide() | Оператор / |
---|---|---|
Синтаксис | np.divide(массив, скаляр) | массив/скаляр |
Гибкость | Предлагает дополнительные параметры, такие как out,where и dtype. Это позволяет лучше контролировать операцию, например указывать тип выходных данных или место применения операции. | Простой и понятный, используется для основных операций деления без дополнительных параметров. |
Обработка ошибок | Может обрабатывать ошибки, такие как деление на ноль, с помощью параметров. Он также позволяет настроить обработку ошибок глобально с помощью np.seterr. | Полагается на глобальную обработку ошибок, установленную np.seterr. Может привести к inf, -inf или nan без явной обработки ошибок. |
Тип возврата | Всегда возвращает новый массив, если не указан параметр out. | Всегда возвращает новый массив. |
Вариант использования | Предпочтительно, если вам нужен больший контроль над операцией деления, например определение типа вывода или обработка делений в подмножестве массива. | Идеально подходит для быстрых и простых операций деления без необходимости дополнительного контроля. |