РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
290 of 541 menu

Функция nancumprod

Функция nancumprod вычисляет кумулятивное произведение элементов массива, игнорируя значения NaN (Not a Number). Кумулятивное произведение - это массив, где каждый элемент равен произведению всех предыдущих элементов включая текущий. В отличие от стандартной функции cumprod, которая при встрече NaN начинает выдавать NaN для всех последующих элементов, nancumprod заменяет NaN на 1 при умножении, что позволяет корректно вычислять произведение остальных элементов. Это особенно полезно при работе с реальными данными, содержащими пропуски, где требуется сохранить непрерывность кумулятивных вычислений.

Синтаксис

np.nancumprod(a, [axis=None], [dtype=None], [out=None])

Параметры:

  • a - входной массив.
  • axis (необязательный) - ось, вдоль которой вычисляется кумулятивное произведение. Если None, массив уплощается перед вычислением.
  • dtype (необязательный) - тип данных результата.
  • out (необязательный) - массив для сохранения результата.

Возвращаемое значение - массив ndarray с кумулятивным произведением.

Пример с одномерным массивом

Вычислим кумулятивное произведение для массива с пропущенными значениями:

import numpy as np arr = np.array([1, 2, np.nan, 4, 5]) res = np.nancumprod(arr) print("Исходный массив:", arr) print("Кумулятивное произведение (игнорируя NaN):", res)

Результат выполнения кода:

Исходный массив: [ 1. 2. nan 4. 5.] Кумулятивное произведение (игнорируя NaN): [ 1. 2. 2. 8. 40.]

Значение NaN было заменено на 1 при умножении, что позволило продолжить вычисления: 1 * 2 = 2, 2 * 1 = 2, 2 * 4 = 8, 8 * 5 = 40.

Пример сравнения с cumprod

Сравним поведение nancumprod и стандартной cumprod:

import numpy as np arr = np.array([1, 2, np.nan, 4, 5]) cumprod_res = np.cumprod(arr) nancumprod_res = np.nancumprod(arr) print("Исходный массив:", arr) print("cumprod (стандартная):", cumprod_res) print("nancumprod (игнорируя NaN):", nancumprod_res)

Результат выполнения кода:

Исходный массив: [ 1. 2. nan 4. 5.] cumprod (стандартная): [ 1. 2. nan nan nan] nancumprod (игнорируя NaN): [ 1. 2. 2. 8. 40.]

Стандартная cumprod после встречи NaN выдает NaN для всех последующих элементов, а nancumprod корректно продолжает вычисления.

Пример с двумерным массивом и осью

Вычислим кумулятивное произведение вдоль разных осей:

import numpy as np arr = np.array([[1, 2, np.nan], [4, np.nan, 6], [np.nan, 8, 9]]) res_axis0 = np.nancumprod(arr, axis=0) res_axis1 = np.nancumprod(arr, axis=1) print("Исходный массив:") print(arr) print("Кумулятивное произведение по столбцам (axis=0):") print(res_axis0) print("Кумулятивное произведение по строкам (axis=1):") print(res_axis1)

Результат выполнения кода:

Исходный массив: [[ 1. 2. nan] [ 4. nan 6.] [nan 8. 9.]] Кумулятивное произведение по столбцам (axis=0): [[ 1. 2. nan] [ 4. 2. 6.] [ 4. 16. 54.]] Кумулятивное произведение по строкам (axis=1): [[ 1. 2. 2.] [ 4. 4. 24.] [ 1. 8. 72.]]

При axis=0 произведение вычисляется по столбцам (сверху вниз), при axis=1 - по строкам (слева направо). Везде NaN были заменены на 1 при умножении.

Пример с dtype

Укажем тип данных результата с помощью параметра dtype:

import numpy as np arr = np.array([1, 2, np.nan, 4, 5]) res = np.nancumprod(arr, dtype=np.float32) print("Результат с dtype=float32:", res) print("Тип данных:", res.dtype)

Результат выполнения кода:

Результат с dtype=float32: [ 1. 2. 2. 8. 40.] Тип данных: float32

Результат был сохранен с указанным типом данных.

Смотрите также

  • функцию nancumsum,
    которая вычисляет кумулятивную сумму, игнорируя NaN
  • функцию nanprod,
    которая вычисляет произведение всех элементов, игнорируя NaN
  • функцию cumprod,
    которая вычисляет кумулятивное произведение без игнорирования NaN
  • функцию nansum,
    которая вычисляет сумму, игнорируя NaN
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить