NumPy: Funções Universais (ufunc)

Última atualização: 2026-08-26

1. O que Você Aprenderá



2. Conceitos-Chave

(1) O Que É uma ufunc

Uma ufunc (função universal) é uma função em nível C que opera elemento a elemento em ndarrays. Todos os operadores aritméticos chamam ufuncs por baixo dos panos.

PYTHON
import numpy as np

# Operadores são ufuncs
print(np.add)        # ufunc 'add'
print(np.multiply)   # ufunc 'multiply'
print(np.sin)        # ufunc 'sin'

# Atributos de ufunc
print(np.add.nin)    # 2 (número de entradas)
print(np.add.nout)   # 1 (número de saídas)
print(np.add.ntypes)  # número de combinações de tipos suportadas

(2) Métodos de ufunc

PYTHON
a = np.array([1, 2, 3, 4, 5])

# reduce: aplica repetidamente para reduzir a um único valor
print(np.add.reduce(a))     # 15 (soma)
print(np.multiply.reduce(a))  # 120 (produto)

# accumulate: resultado acumulado
print(np.add.accumulate(a))  # [1 3 6 10 15]

# outer: aplica a todos os pares
print(np.multiply.outer([1, 2, 3], [10, 20, 30]))
# [[10 20 30]
#  [20 40 60]
#  [30 60 90]]
TEXT 📖 Somente leitura
> **Output:** Execute o NumPy 2.x em seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem o NumPy pré-instalado — instale-o localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.

▶ Exemplo: Atributos de ufunc (Dificuldade ⭐)

PYTHON
import numpy as np

print("add:", np.add)
print("multiply:", np.multiply)
print("sin:", np.sin)

print(f"np.add.nin: {np.add.nin}")
print(f"np.add.nout: {np.add.nout}")
print(f"np.add.ntypes: {np.add.ntypes}")

Output:

TEXT 📖 Somente leitura
add: ufunc 'add'
multiply: ufunc 'multiply'
sin: ufunc 'sin'
np.add.nin: 2
np.add.nout: 1
np.add.ntypes: 22

▶ Exemplo: ufunc reduce e accumulate (Dificuldade ⭐⭐)

PYTHON
import numpy as np

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

# reduce: aplica repetidamente para obter um único valor
print("add.reduce:", np.add.reduce(a))
print("multiply.reduce:", np.multiply.reduce(a))

# accumulate: resultado acumulado
print("add.accumulate:", np.add.accumulate(a))
print("multiply.accumulate:", np.multiply.accumulate(a))

Output:

TEXT 📖 Somente leitura
add.reduce: 15
multiply.reduce: 120
add.accumulate: [ 1  3  6 10 15]
multiply.accumulate: [  1   2   6  24 120]

▶ Exemplo: ufunc outer (Dificuldade ⭐⭐)

PYTHON
import numpy as np

# Produto externo: multiplica cada par
x = np.array([1, 2, 3])
y = np.array([10, 20, 30, 40])
print("outer:\n", np.multiply.outer(x, y))

# Comparação externa
a = np.array([1, 3, 5])
b = np.array([2, 4, 6])
print("greater.outer:\n", np.greater.outer(a, b))

Output:

TEXT 📖 Somente leitura
outer:
 [[ 10  20  30  40]
 [ 20  40  60  80]
 [ 30  60  90 120]]
greater.outer:
 [[False False False]
 [ True False False]
 [ True  True False]]

P: Qual é a diferença entre uma ufunc e uma função regular? R: Uma ufunc opera elemento a elemento, lida com broadcasting, promoção de tipos e buffering de saída automaticamente. É implementada em C, sendo muito mais rápida que funções Python.

P: Como crio uma ufunc personalizada? R: Use np.frompyfunc(func, nin, nout) para envolver uma função Python. A ufunc resultante lida com broadcasting, mas ainda é em nível Python, então o desempenho é limitado.

P: O que é reduceat? R: np.add.reduceat(a, indices) aplica reduce em fatias específicas — útil para somas segmentadas ou operações agrupadas.


❓ Perguntas Frequentes

P: O que é a coisa mais importante a lembrar? R: As operações do NumPy são vetorizadas — evite loops Python para melhor desempenho.

P: Onde posso aprender mais? R: Consulte a documentação oficial do NumPy em numpy.org para referências detalhadas e tópicos avançados.

P: Isso funciona com o NumPy 2.x? R: Sim — todos os exemplos são compatíveis com o NumPy 2.x. Algumas APIs mais antigas (como np.random.seed) ainda são suportadas, mas as alternativas modernas são recomendadas.

📖 Resumo



📝 Exercícios

  1. Básico (Dificuldade ⭐): Liste os atributos de np.add — nin, nout, ntypes, types. Explique o que cada um significa.

  2. Intermediário (Dificuldade ⭐⭐): Use np.add.reduce para somar um array, np.add.accumulate para computar a soma acumulada e np.multiply.outer para criar uma tabela de multiplicação.

  3. Desafio (Dificuldade ⭐⭐⭐): Use np.frompyfunc para criar uma ufunc personalizada que retorna o maior de dois números. Aplique-a a dois arrays e compare com np.maximum.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%