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

Функция nancumsum

Функция nancumsum вычисляет кумулятивную сумму элементов массива, пропуская значения NaN. При встрече с NaN функция сохраняет предыдущую накопленную сумму без изменений, а затем продолжает суммирование следующих элементов. Первым параметром функция принимает массив для вычисления. Вторым параметром можно указать ось для суммирования.

Синтаксис

np.nancumsum(a, axis=None, dtype=None, out=None)

Параметры

a - входной массив, может содержать значения NaN.

axis - ось, вдоль которой вычисляется кумулятивная сумма. По умолчанию None - массив сглаживается.

dtype - тип данных результирующего массива.

out - альтернативный выходной массив для результата.

Пример

Давайте вычислим кумулятивную сумму для одномерного массива с одним значением NaN:

import numpy as np arr = np.array([1, 2, np.nan, 4, 5]) res = np.nancumsum(arr) print(res)

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

[1. 3. 3. 7. 12.]

Значение NaN было пропущено, и сумма продолжила накапливаться с 3 до 7, затем до 12.

Пример

Давайте сравним поведение nancumsum и обычной cumsum при наличии NaN:

import numpy as np arr = np.array([1, np.nan, 3, 4]) res_nan = np.nancumsum(arr) res_cum = np.cumsum(arr) print("nancumsum:", res_nan) print("cumsum:", res_cum)

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

"nancumsum: [1. 1. 4. 8.]" "cumsum: [1. nan nan nan]"

Обычная cumsum делает все последующие элементы равными NaN, тогда как nancumsum продолжает корректно суммировать.

Пример

Давайте применим функцию к двумерному массиву по оси 0 (по столбцам):

import numpy as np arr = np.array([[1, np.nan, 3], [4, 5, 6], [np.nan, 8, 9]]) res = np.nancumsum(arr, axis=0) print(res)

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

[[1. nan 3.] [5. 5. 9.] [5. 13. 18.]]

Для каждой колонки вычисляется накопленная сумма: в первом столбце 1 + 4 = 5, затем + NaN = 5; во втором столбце NaN + 5 = 5, затем + 8 = 13.

Пример

Давайте вычислим кумулятивную сумму по оси 1 (по строкам):

import numpy as np arr = np.array([[1, 2, np.nan], [4, np.nan, 6], [7, 8, 9]]) res = np.nancumsum(arr, axis=1) print(res)

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

[[1. 3. 3.] [4. 4. 10.] [7. 15. 24.]]

В первой строке сумма накапливается: 1, 1+2=3, затем NaN пропускается, и сумма остаётся 3. Во второй строке: 4, затем 4 + NaN = 4, затем 4 + 6 = 10.

Пример

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

import numpy as np arr = np.array([1, 2, np.nan, 4]) res_int = np.nancumsum(arr, dtype=np.int64) res_float = np.nancumsum(arr, dtype=np.float64) print("int64:", res_int) print("float64:", res_float)

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

"int64: [1 3 3 7]" "float64: [1. 3. 3. 7.]"

Тип результата контролируется через dtype: для целых чисел NaN преобразуется в 0, для чисел с плавающей точкой сохраняется пропуск значений.

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

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