NumPy cumsum: Расчет кумулятивных сумм массивов NumPy

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

К концу этого урока вы узнаете:

  • Как понять функцию NumPy cumsum()

  • Как вычислить совокупные суммы одномерных и двумерных массивов NumPy

  • Как указать ось, по которой рассчитывать накопленные суммы

  • Как указать тип данных накопительных сумм в NumPy

Оглавление

Понимание функции cumsum NumPy

Перед тем как погрузиться в то, как использовать функцию cumsum() в NumPy, давайте рассмотрим, из чего состоит эта функция. Мы быстро ознакомимся с различными параметрами функции и их аргументами по умолчанию (если таковые имеются). Это даст вам хорошее представление о том, что ожидать в плане возможностей настройки кумулятивных сумм, которые вы можете рассчитать с помощью NumPy.

# Понимание функции np.cumsum() из библиотеки NumPy
np.cumsum(a, axis=None, dtype=None, out=None)

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

В таблице ниже представлены параметры и аргументы по умолчанию функции NumPy cumsum():

Параметр
Описание
Аргумент по умолчанию
Принятые значения

a=

Входной массив

N/A

array like

axis=

Ось, по которой рассчитывается совокупная сумма. По умолчанию NumPy сглаживает массив.

None

int

dtype=

Тип возвращаемого массива.

None

dtype

out=

Альтернативный выходной массив, в который можно поместить результат.

None

ndarray

Теперь, когда у вас есть глубокое понимание функции, давайте посмотрим, как вы можете вычислять кумулятивные суммы одномерных массивов NumPy.

Вычисление совокупных сумм одномерных массивов NumPy

Чтобы рассчитать накопленную сумму одномерного массива, вы можете просто передать массив в функцию np.cumsum(). Это вернет массив той же длины, содержащий значения накопленных сумм. Давайте посмотрим, как это выглядит:

# Вычисление накопленных сумм одномерных массивов NumPy
import numpy as np

arr = np.arange(5)

cumsum = np.cumsum(arr)
print(cumsum)

# Returns: [ 0  1  3  6 10]

Этот код вычисляет накопленные суммы элементов одномерного массива arr с помощью функции np.cumsum().

Давайте разберем, что мы сделали в приведенном выше коде:

  1. Мы использовали функцию np.arange() для возвращения массива, содержащего значения от 0 до 4

  2. Мы передали этот массив в функцию np.cumsum() для вычисления кумулятивных сумм.

В следующем разделе вы узнаете, как вычислять кумулятивные суммы для списков в Python.

Использование NumPy cumsum для расчета совокупных сумм списков Python

Функция cumsum в NumPy ожидает для своей работы объект, похожий на массив. Это означает, что мы также можем вычислять кумулятивные суммы значений списка Python. Давайте посмотрим, как это выглядит:

# Вычисление накопленных сумм для списков Python
import numpy as np

values = [0, 1, 2, 3, 4]

cumsum = np.cumsum(values)
print(cumsum)

# Returns: [ 0  1  3  6 10]

Этот код вычисляет накопленные суммы элементов списка values с помощью функции np.cumsum(). На выходе получается массив NumPy с накопленными суммами.

В приведенном выше коде мы генерируем список значений от 0 до 4. Затем мы передаем этот список в функцию np.cumsum(). Это возвращает массив NumPy кумулятивных значений. Чтобы вернуть список значений, вы можете просто передать этот массив в конструктор

Вычисление совокупных сумм двумерных массивов NumPy

Функция np.cumsum() также позволяет передавать двумерные массивы. Давайте посмотрим, что происходит, когда мы передаем в неё двумерный массив NumPy:

# Вычисление накопленных сумм для двумерных массивов
import numpy as np

arr = np.array([
    [0, 1, 2],
    [3, 4, 5]
])

cumsum = np.cumsum(arr)
print(cumsum)

# Returns: [ 0  1  3  6 10 15]

Этот код вычисляет накопленные суммы элементов двумерного массива arr с помощью функции np.cumsum(). Функция рассматривает двумерный массив как одномерный массив, выпрямляя его перед вычислением накопленной суммы.

Этот результат может вас удивить: по умолчанию функция cumsum в NumPy будет преобразовывать двумерный массив в одномерный, если не указана ось. Из-за этого функция сначала преобразует двумерный массив в одномерный, а затем возвращает кумулятивную сумму. Давайте посмотрим, как это выглядит, когда мы указываем ось.

Изменение оси в NumPy cumsum

NumPy предоставляет как первую, так и вторую оси. Первая ось представляет собой "столбцы" массива, в то время как вторая ось представляет "строки" массива.

Вычисляя кумулятивные суммы по 0-й оси, вы получаете массив того же размера и формы. В этом массиве суммы вычисляются "вниз" по столбцам, как показано ниже

# Вычисление накопленных сумм по оси 0 для двумерных массивов
import numpy as np

arr = np.array([
    [0, 1, 2],
    [3, 4, 5]
])

cumsum = np.cumsum(arr, axis=0)
print(cumsum)

# Returns:
# [[0 1 2]
#  [3 5 7]]

Этот код вычисляет накопленные суммы элементов двумерного массива arr по оси 0 с помощью функции np.cumsum(). Каждый элемент результата является суммой элементов вдоль оси 0, начиная с первого элемента и заканчивая текущим элементом.

Аналогичным образом мы можем рассчитать кумулятивные суммы по 1-му измерению. Это дает кумулятивные суммы по "строкам" массива. Давайте посмотрим, как это выглядит:

# Вычисление накопленных сумм по оси 1 для двумерных массивов
import numpy as np

arr = np.array([
    [0, 1, 2],
    [3, 4, 5]
])

cumsum = np.cumsum(arr, axis=1)
print(cumsum)

# Returns:
# [[ 0  1  3]
#  [ 3  7 12]]

Этот код вычисляет накопленные суммы элементов двумерного массива arr по оси 1 с помощью функции np.cumsum(). Каждый элемент результата является суммой элементов вдоль оси 1, начиная с первого элемента и заканчивая текущим элементом.

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

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

Изменение типа данных при вычислении накопительных сумм NumPy

По умолчанию NumPy вернет массив, соответствующий наименьшему общему типу данных, найденному в массиве. Мы можем изменить тип данных массива, передав тип данных в параметр dtype=. В массиве, который мы использовали, все значения являются целыми числами. Давайте укажем, что мы хотим, чтобы результирующий тип данных был вещественными числами:

# Изменение типа данных при вычислении накопленных сумм
import numpy as np

arr = np.arange(5)

cumsum = np.cumsum(arr, dtype='float')
print(cumsum)

# Returns: [ 0.  1.  3.  6. 10.]

Этот код вычисляет накопленные суммы элементов одномерного массива arr, используя тип данных float, с помощью функции np.cumsum().

Мы видим, что результаты кумулятивных сумм такие же, как и ранее, однако каждое значение теперь представляет собой число с плавающей точкой, а не целое число.

Заключение

В этом учебном пособии вы научились вычислять кумулятивные суммы с помощью функции cumsum() библиотеки NumPy. Сначала вы изучили, как работает функция, рассмотрев ее параметры и аргументы по умолчанию. Затем вы научились вычислять кумулятивные суммы одномерных массивов и списков Python. После этого вы научились вычислять кумулятивные суммы двумерных массивов, включая изменение осей. Наконец, вы научились изменять типы данных результирующих массивов.

Дополнительные ресурсы

Чтобы узнать больше о смежных темах, ознакомьтесь с нижеприведенными учебными материалами:

Last updated