Рубрики
Без рубрики

Ultimate Guide для Numpy Cumsum в Python

Все, что вам нужно знать о np.cumsum (). Просто объяснил!

Автор оригинала: Chris.

Определение np.cumsum (x): Функция вычисляет совокупную сумму Numpy Array. Для массива х с элементами [A b c d] Кумулятивная сумма – [A + B A + B + C A + B + C + D] Отказ Формально каждый элемент массива с индексом Я это сумма всех элементов с индексом J Отказ

numpy.cumsum ( A , ось = Нет , dtype = Нет , out = Нет Несомненно

Аргументы:

  • А – Массивный тип данных. Входной массив функции
  • Ось – целочисленное значение. Ось, на которую вы хотите вычислить совокупную сумму. По умолчанию вы вычислите совокупную сумму над сплющенным массивом.
  • Dtype – Тип возврата массива. Также тип накопленной суммы. По умолчанию это DTYPE Array A.
  • OUT – Numpy Array. Если вы хотите сохранить свой результат в альтернативном массиве, используйте этот аргумент.

Попробуйте сами в нашей интерактивной Python Shell:

Упражнение : Можете ли вы уже выяснить вывод фрагмента кода?

Далее вы узнаете все, что вам нужно знать о np.cumsum () Отказ Так что держите чтение!

Что такое функция numpy cumsum ()?

Учитывая входной массив, Numpy ‘s Cumsum () Функция рассчитывает совокупную сумму значений в массиве. Это производит новый массив в результате.

Важно подчеркнуть разницу между совокупная сумма и сумма :

Может показаться интуитивно понятным, что совокупная сумма – это одно число, полученное путем агрегации. Но это не так! Это будет сумма чисел в массиве. Например. Сумма чисел от 1 до 5 есть. Сумма представляет «Total», агрегирует данные в массиве в одно число.

С другой стороны, совокупная сумма будет «прогона». Допустим, вы хотите отслеживать вашу полную экономию в электронной таблице. Прежде чем добавить новую сумму на экономию, вы хотите узнать предыдущее общее количество. Например, первая неделя вы экономите 100 долларов. После первой недели у вас будет 100 долларов в ваших сбережениях. Вторая неделя вы добавляете еще 100 долларов. После второй недели у вас будет 200 долларов и так далее.

Если у нас есть массив с элементами (A, B, C, D) совокупной суммой (A, A + B, A + B + C, A + B + C + D).

Вот пример, который рассчитывает совокупную сумму для сберегательного счета.

# import NumPy library
# we assume that this has already been done in the future examples
import numpy as np

# create an array that represents our savings each week over two months
savings = np.array([[100, 200, 150, 220], [300, 200, 150, 100]])

# calculate the cumulative sum
cumsum = np.cumsum(savings)

print(cumsum)
# array([ 100, 300, 450, 670, 970, 1170, 1320, 1420])

Мы видим, что после первой недели у нас было 100 долларов, после второй недели у нас было 300 долларов и так далее. Через два месяца у нас было 1420 долларов в нашей экономии.

Синтаксис NP.cumsum ()

Давайте посмотрим на общий синтаксис:

np.cumsum(array, axis=None, dtype=None, out=None)

Функция имеет следующие аргументы:

  • вход массив Может быть любой номерного массива «сплющенный» или многомерный Отказ
  • Ось Аргумент – это Нет по умолчанию. Если не указано, он вычисляет совокупную сумму над сплющенным массивом. В противном случае Ось Аргумент может быть 0,1,2 … в зависимости от измерения массива. В этом случае мы рассчитываем совокупную сумму вдоль указанной оси. Это необязательный аргумент Отказ
  • Аргумент Dtype Определяет тип возвращенного массива. Это необязательный аргумент И если он не указан, то он принимает тип входного массива.
  • Аргумент OUT является дополнительным аргументом. Он определяет выходной массив, в котором следует разместить результат функции. Если не указано, создается новый массив.

Numpy Cumsum () оси

Чтобы понять, как Cumsum () Функция работает, нам нужно хорошее понимание осей NaMpy. Немецкие массивы могут быть одномерными или многомерными.

Совокупная сумма сплющенного массива (1-D)

Одномерные массивы обозначены как «плоский»:

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

Одномерные массивы имеют только одну ось (указанную как AXIS = 0 ). При использовании Cumsum () Функция Вам не нужно указать Ось = 0. Если Вы имеете дело с 1-D массивом.

# create an array
one_D_arr = np.array(np.arange(10))

print(one_D_arr)
# [0 1 2 3 4 5 6 7 8 9]

# cumulative sum
cumsum = np.cumsum(one_D_arr)

print(cumsum)
# array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45])

Поэтому при работе с одномерными массивами вам не нужно определять Ось Аргумент для расчета совокупной суммы с Numpy.

Совокупная сумма матрицы (2D Array)

Двумерный массив равен матрице с рядами и колоннами. Ось 0 идет по рядам матрицы. Ось 1 идет вдоль колонн матрицы.

Оси начинаются при 0, как показатели списков Python. Если мы не укажем ось, совокупная сумма приводит к 1-D массиве. Numpy будет сглаживать входной массив.

Вот пример 2-D массива без указанной оси:

#2-D array
two_D_arr = np.array([[1,2,3], [4,5,6]])
cumsum = np.cumsum(two_D_arr)
print(cumsum)
# array([ 1, 3, 6, 10, 15, 21])

Теперь давайте посмотрим, как мы получим совокупную сумму Два D-ARR массив вдоль оси 0. Суммирование – «ROW-WISE».

#2-D array
two_D_arr = np.array([[1,2,3], [4,5,6]])
cumsum = np.cumsum(two_D_arr, axis = 0)
print(cumsum)
# array([[1, 2, 3],[5, 7, 9]])

Первый ряд, [1,2,3] остается прежним. Рекомендайте этот пример сбережений! Если вы сохранили 100 долларов за первую неделю, совокупная сумма после этой первой недели составит 100 долларов.

Мы получаем второй ряд, добавив те же индексы из каждой строки:

[1+4, 2+5, 3+6] = [5, 7, 9]

Наконец, давайте посмотрим, что произойдет, когда мы рассчитываем совокупную сумму над осью 1.

#2-D array
two_D_arr = np.array([[1,2,3], [4,5,6]])
cumsum = np.cumsum(two_D_arr, axis = 1)
print(cumsum)
# array([[ 1, 3, 6], [ 4, 9, 15]])

Здесь суммирование происходит «внутри» каждого элемента.

1-й элемент [ 1, 3, 6] = [1, 1+3, 1+2+3]

2-й элемент [ 4, 9, 15] = [4, 4+5, 4+5+6]

В чем разница между Pandas Cumsum () и Numpy Cumsum ()?

Есть Cumsum () Функция в библиотеке Pandas. Я кратко упомяну, что основная структура данных в Пандас это кадр данных. В некотором смысле, это как 2-D массив, потому что он содержит строки и столбцы. В отличие от 2-D массива, A Рамка данных Является ли Python Equivalent электронной таблицы Excel с индексной колонкой и строкой заголовка. Серия Panda аналогична 1-D массива, так как это 1-D объект.

Синтаксис панд Cumsum () Функция это series.cumsum (ось = Нет,) Отказ

Основное различие между Numpy Cumsum () и панда Cumsum () Функции это то, что пандас Cumsum () Работает с Нан ценности. Скипина Аргумент – это Правда По умолчанию, поэтому совокупная сумма будет именно то, что вы ожидаете, что это будет. За исключением того, что что-нибудь добавлено к Нан Значение производит еще один Нан ценить. Если элементы в оригинальной серии являются целыми числами, но есть как минимум один Нан Значение, элементы в кумулятивной сумме серии будут Dtype плавать.

series = pd.Series([1,2,3,np.nan])
cumsum = series.cumsum()
print(cumsum)
'''
0 1.0
1 3.0
2 6.0
3 NaN
dtype: float64
'''

Объяснение

Пандас Cumsum () Функция суммирует значения в серии Panda:

1
1+2 = 3
3+3 = 6
6+NaN = NaN

После преобразования в тип данных поплавка мы получаем полученную серию Panda.

Функция numpy cumprod ()

Приятно знать, что существует функция numpy кумулятивной продукции Cumprod () Отказ

Теперь, когда мы понимаем, что Cumsum () объясняет, что Cumprod () Это просто. Функция вычисляет кумулятивный продукт вдоль оси. Я не буду собираться больше деталей о Cumprod () в этом блоге пост.

Синтаксис numpy.cumprod (массив ,,,) Отказ

Рассмотрим следующие примеры:

#2-D array
two_D_arr = np.array([[1,2,3], [4,5,6]])
cumprod = np.cumprod(two_D_arr)
print(cumprod)
# array([ 1, 2, 6, 24, 120, 720])

Те же осевая логика, которая применяется к Cumsum () относится к Cumprod () Отказ

Примеры

Давайте закончим с некоторыми примерами.

Количество подписчиков

Вы хотите запустить отчет и посмотреть, сколько новых абонентов вашей компании прошли в прошлом году. Данные собраны каждые 1-й день месяца в полночь.

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

Вот число новых подписчиков на каждый месяц за прошедший год.

'''
| Month        | Subscribers   |
|:------------:|:-------------:|
| August       | 347           |
| September    | 326           |
| October      | 389           |
| November     | 405           |
| December     | 476           |
| January      | 474           |
| February     | 602           |
| March        | 626           |
| April        | 699           |
| May          | 817           |
| June         | 812           |
| July         | 963           |
'''

Давайте построим свои выводы и сделайте выводы на основе построенных данных.

#import libraries import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

subscribers = np.array([347, 326, 389, 405, 476, 474, 602, 626, 699, 817, 812, 963])
cumulative_sum = np.cumsum(subscribers, dtype = int)

figure = plt.plot(subscribers, color='g', label = 'subscribers')
cumsum = plt.plot(cumulative_sum, color='orange', label = 'cumulative sum')
plt.legend(loc='upper left')
plt.show()

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

Количество новых подписчиков, кажется, расти линейно. Из-за эффекта накопления совокупная сумма подписчиков растет квадратично.

Обратный Cumsum ()

Допустим, у нас есть массив [A, B, C, D], и мы хотим вычислить [D + C + B + A, D + C + B, D + C, D]. Мы собираемся называть это «обратная совокупная сумма». Для нашего входного массива мы будем использовать Подписчики массив из предыдущего примера.

subscribers = np.array([347, 326, 389, 405, 476, 474, 602, 626, 699, 817, 812, 963])
reverse_cumsum = np.cumsum(subscribers[::-1])[::-1]
print(reverse_cumsum)
# array([6936, 6589, 6263, 5874, 5469, 4993, 4519, 3917, 3291, 2592, 1775, 963])

Мы используем Cumsum () Функция в сочетании с нарезкой (размер отрицательного шага) для достижения желаемого результата.

Кумулятивная функция распространения (CDF) и площадь под кривой (AUC)

Совокупная функция распределения (CDF) случайной вариабели Х дает вероятность того, что значение меньше или равно х Отказ

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

Ради нашего примера мы собираемся создать случайную серию Использование NP.RANDOM.NOMMAL () функция , что рисует случайные образцы из распределения. Тогда мы собираемся сортировать и бин наши данные. Наконец, мы собираемся вычислить площадь под кривой, которая будет представлять наш CDF функция .

Вот код:

import pandas as pd
import numpy as np # used only to create example data
import matplotlib.pyplot as plt

# Create a random normally distributed series
series = pd.Series(np.random.normal(size=10000))

# s=Size of our data
series_size=len(series)

# Sort the data and set bins edges
sorted_series = np.sort(series)
bins = np.append(sorted_series, sorted_series[-1]+1)

# Use the histogram function to bin the data
hist, bin_edges = np.histogram(series, bins = bins)

# Account for the possible float data
hist = hist.astype(float)/series_size

# Find the cdf
cdf = np.cumsum(hist)

# Plot the cdf
plt.plot(bin_edges[1:], cdf)

plt.show()

При выполнении фрагмента кода мы получаем следующий участок:

Cumsum () Функция имеет широкий спектр использования от основных финансовых проблем для более сложных Машинное обучение Приложения. Обязательно освоить это!

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Interxter.com Пользователь Милька внес эту статью. Спасибо, Милика за великий контент! 👩 🎓.

Хотите улучшить свои навыки Python? Присоединяйтесь к бесплатному курсу Email Python Email и скачать ваши читы Python (и Numpy) …

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/numpy-cumsum/”