Чтобы разделить массив NumPy на скаляр в Python, мы можем использовать оператор / для простого поэлементного деления или numpy.divide для дополнительного контроля над операцией. Обработка деления на ноль достигается с помощью numpy.seterr. NumPy также поддерживает поэлементное деление с трансляцией для массивов различной формы и деление на месте с использованием оператора /=.

Содержание

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 визуально представлен на снимке экрана ниже.

С помощью np.divide()

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. Всегда возвращает новый массив.
Вариант использования Предпочтительно, если вам нужен больший контроль над операцией деления, например определение типа вывода или обработка делений в подмножестве массива. Идеально подходит для быстрых и простых операций деления без необходимости дополнительного контроля.

 

Добавить комментарий