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.