Solucionado (ver solução)
Solucionado
(ver solução)
2
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.


2 respostas
solução!

Bom dia, Yuri! Como vai?

Você trouxe uma questão muito interessante sobre a diferença entre sum() e np.sum().

Ambos realmente podem ser usados para contar o número de NaNs em um array, como você bem observou. No contexto do exercício que você mencionou, tanto sum(np.isnan(suco_de_limao)) quanto np.sum(np.isnan(suco_de_limao)) são soluções corretas para determinar o número total de NaNs no array suco_de_limao.

A diferença principal, como você destacou, é que np.sum() é otimizado para trabalhar com arrays do NumPy e pode ser muito mais eficiente, especialmente quando se trata de arrays grandes. Além disso, o np.sum() oferece a flexibilidade de trabalhar com o parâmetro axis, permitindo somar ao longo de dimensões específicas, o que é extremamente útil em análises mais complexas.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Olá, Daniel!

Tudo ótimo por aqui, obrigado por perguntar.

Agradeço imensamente pela sua resposta e, principalmente, pela validação. É muito valioso poder checar nosso raciocínio e aprender com a experiência de outros profissionais.

Saber que a distinção entre sum() e np.sum(), e o poder do parâmetro axis, é o abordagem padrão em projetos sérios me ajuda a solidificar um modelo mental para tomar decisões melhores no futuro.