numpy.cumsum() em Python

O NumPy, uma biblioteca fundamental em Python para computação numérica, oferece estruturas de dados eficientes, como arrays multidimensionais, e um vasto conjunto de funções para manipulação e análise de dados. Entre essas funções, numpy.cumsum() se destaca por sua capacidade de calcular somas cumulativas de maneira eficaz.

Essa função tem um papel crucial em diversas aplicações, como:

  • Acompanhamento de totais acumulados em dados de séries temporais.
  • Determinação da distribuição cumulativa de variáveis aleatórias.
  • Cálculo de médias móveis.
  • Implementação de operações de convolução.

Sintaxe da Função

A estrutura da função numpy.cumsum() é a seguinte:

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

Onde:

  • array: O array de entrada sobre o qual a soma cumulativa será calculada.
  • axis: O eixo ao longo do qual a soma cumulativa será efetuada. O valor padrão (None) considera o array como uma sequência linear.
  • dtype: Define o tipo de dados do array resultante. Por padrão (None), herda o tipo do array original.
  • out: Um array opcional onde o resultado pode ser armazenado, evitando a criação de um novo array.

Parâmetros Adicionais

A função numpy.cumsum() oferece parâmetros adicionais para flexibilizar o seu uso:

  • nanpolicy: Especifica como os valores NaN (Not a Number) devem ser tratados, com as seguintes opções:
    • propagate: Valores NaN são propagados para o resultado.
    • raise: Um erro ValueError é levantado se um NaN for encontrado.
    • omit: Valores NaN são ignorados no cálculo da soma.
  • exclusive: Quando definido como True, o primeiro elemento do array é excluído da soma cumulativa.
  • reverse: Se True, a soma cumulativa é calculada em ordem inversa, do último para o primeiro elemento.

Resultado

A função numpy.cumsum() retorna um array com a mesma forma do array de entrada, onde cada elemento representa a soma cumulativa até aquele ponto ao longo do eixo especificado.

Exemplos Práticos de Uso

A seguir, alguns exemplos para ilustrar o uso da função numpy.cumsum():

Soma Cumulativa em Array Unidimensional

Calculando a soma cumulativa de um array simples:

import numpy as np

array = np.array([1, 2, 3, 4, 5])
resultado = np.cumsum(array)

print(resultado)

Saída:

[ 1  3  6 10 15]

Soma Cumulativa em Array Bidimensional

Aplicando a soma cumulativa em um array bidimensional, ao longo do primeiro eixo:

array = np.array([[1, 2, 3], [4, 5, 6]])
resultado = np.cumsum(array, axis=0)

print(resultado)

Saída:

[[1 2 3]
 [5 7 9]]

Tratamento de Valores NaN

Demonstrando como ignorar valores NaN no cálculo da soma cumulativa:

array = np.array([1, 2, np.nan, 4, 5])
resultado = np.cumsum(array, nanpolicy='omit')

print(resultado)

Saída:

[ 1  3  3  7 12]

Considerações Finais

A função numpy.cumsum() é uma ferramenta valiosa para realizar somas cumulativas em arrays NumPy, oferecendo flexibilidade e opções para atender a diversas necessidades em análise de dados. Sua capacidade de lidar com valores NaN e trabalhar em múltiplas dimensões a torna indispensável em diversas aplicações.

Perguntas e Respostas Frequentes

1. Qual a diferença entre numpy.cumsum() e numpy.sum()? numpy.cumsum() calcula somas acumuladas, enquanto numpy.sum() calcula a soma total dos elementos.
2. Como calculo a soma cumulativa inversa? Use o parâmetro reverse=True ao chamar numpy.cumsum().
3. Como lidar com NaN usando numpy.cumsum()? O parâmetro nanpolicy controla o tratamento de valores NaN ('omit' para ignorar).
4. Posso usar numpy.cumsum() em arrays multidimensionais? Sim, definindo o parâmetro axis para o eixo desejado.
5. Posso salvar o resultado em um array já existente? Sim, use o parâmetro out para especificar um array existente.
6. Qual o tipo de dados do resultado de numpy.cumsum()? Por padrão, o mesmo tipo do array de entrada, mas pode ser alterado com dtype.
7. Como calcular a soma cumulativa ponderada? Multiplique o array pelo array de pesos e use numpy.cumsum().
8. Qual a complexidade computacional de numpy.cumsum()? A complexidade é O(n), onde n é o número de elementos no array.