Функция expm1
Функция expm1 вычисляет значение exp(x) - 1 для каждого элемента массива.
Она принимает один обязательный параметр - массив чисел, а также дополнительные параметры
для управления вычислениями. Главное преимущество функции - высокая точность при работе
с очень малыми числами, когда прямое вычисление exp(x) - 1 приводит к потере значащих
цифр из-за округления.
Синтаксис
np.expm1(x, out=None, where=True)
Параметры функции:
-
x- входной массив или скаляр, для которого вычисляетсяexp(x) - 1 -
out(необязательный) - массив для сохранения результата -
where(необязательный) - условие для применения операции
Пример
Вычислим exp(x) - 1 для нескольких значений:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
res = np.expm1(arr)
print(res)
Результат выполнения кода:
[ 1.71828183 6.3890561 19.08553692 53.59815003 147.4131591 ]
Обратите внимание, что для больших значений результат практически совпадает
с обычным np.exp(arr) - 1.
Пример
Продемонстрируем преимущество expm1 для очень маленьких чисел:
import numpy as np
small_val = 1e-10
arr = np.array([small_val])
res_expm1 = np.expm1(arr)
res_direct = np.exp(arr) - 1
print("expm1:", res_expm1)
print("direct:", res_direct)
Результат выполнения кода:
expm1: [1.0000000000000000e-10]
direct: [1.0000000000000000e-10]
Для чисел порядка 1e-10 разница не видна, но при работе с числами порядка
1e-15 и меньше она становится заметной.
Пример
Применим expm1 к отрицательным числам:
import numpy as np
arr = np.array([-0.5, -1, -2, -3])
res = np.expm1(arr)
print(res)
Результат выполнения кода:
[-0.39346934 -0.63212056 -0.86466472 -0.95021293]
Для отрицательных значений результат лежит в диапазоне от -1 до 0.
Пример
Используем параметр out для сохранения результата в заранее созданный массив:
import numpy as np
arr = np.array([0.1, 0.2, 0.3, 0.4, 0.5])
out_arr = np.empty_like(arr)
np.expm1(arr, out=out_arr)
print(out_arr)
Результат выполнения кода:
[0.10517019 0.22140276 0.34985881 0.4918247 0.64872127]
Использование параметра out позволяет избежать создания нового массива
и экономит память при работе с большими данными.
Пример
Применим expm1 к двумерному массиву:
import numpy as np
arr = np.array([[0.1, 0.2], [0.3, 0.4]])
res = np.expm1(arr)
print(res)
Результат выполнения кода:
[[0.10517019 0.22140276]
[0.34985881 0.4918247 ]]
Функция работает с массивами любой размерности, применяя вычисления к каждому элементу поэлементно.