0
respostas

[Discussão] Diferença entre sum() e np.sum() no exercício

Fala, pessoal!

No exercício apareceu tanto:

sum(np.isnan(suco_de_limao))
np.sum(np.isnan(suco_de_limao))

Ambos foram aceitos como corretos. Achei curioso e fui atrás de entender melhor.

No caso do exercício, o resultado é o mesmo: os dois contam os NaNs, porque True é tratado como 1 e False como 0.

Diferenças importantes

sum() (built-in do Python)

  • Funciona em qualquer objeto iterável (listas, sets, arrays do NumPy, etc).
  • Faz a soma item a item em Python puro.
  • Em arrays pequenos não faz diferença, mas em arrays grandes pode ser bem mais lento.

np.sum() (NumPy)

  • Implementado em C, faz a operação de forma vetorizada e otimizada.
  • Permite usar o parâmetro axis, o que dá muito mais controle em arrays multidimensionais.
  • Retorna objetos NumPy (np.int64, por exemplo), o que mantém a consistência em pipelines científicos.

-> Ou seja: no contexto do exercício, os dois dão o mesmo resultado. Mas quando lidamos com performance ou queremos trabalhar em dimensões específicas de arrays, np.sum() é claramente mais apropriado.

Exemplo rápido com array 2D

import numpy as np

arr = np.array([[1, 2, np.nan],
                [4, np.nan, 6]])

print(sum(np.isnan(arr)))        # Conta NaNs no array achatado → 2
print(np.sum(np.isnan(arr)))     # Também conta no array todo → 2
print(np.sum(np.isnan(arr), axis=0))  # Conta NaNs por coluna → [0 1 1]

Esse último mostra bem como o axis dá um controle muito maior.