NumPy: Funções Universais (ufunc)
Última atualização: 2026-08-26
1. O que Você Aprenderá
- ❶ O que é uma ufunc — função universal
- ❷ Atributos de ufunc: nin, nout, ntypes, types
- ❸ Métodos de ufunc: reduce, accumulate, outer, reduceat
- ❹ Criando ufuncs personalizadas com
np.frompyfunc
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.
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
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]]
> **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 ⭐)
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 leituraadd: 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 ⭐⭐)
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 leituraadd.reduce: 15 multiply.reduce: 120 add.accumulate: [ 1 3 6 10 15] multiply.accumulate: [ 1 2 6 24 120]
▶ Exemplo: ufunc outer (Dificuldade ⭐⭐)
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 leituraouter: [[ 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
- ufuncs são funções elemento a elemento em nível C:
np.add,np.multiply,np.sin, etc. - Atributos:
nin,nout,ntypes,typesdescrevem a interface da ufunc - Métodos:
reduce(valor único),accumulate(acumulado),outer(todos os pares),reduceat(segmentos) - ufuncs são o motor por trás da vetorização e broadcasting do NumPy
📝 Exercícios
-
Básico (Dificuldade ⭐): Liste os atributos de
np.add— nin, nout, ntypes, types. Explique o que cada um significa. -
Intermediário (Dificuldade ⭐⭐): Use
np.add.reducepara somar um array,np.add.accumulatepara computar a soma acumulada enp.multiply.outerpara criar uma tabela de multiplicação. -
Desafio (Dificuldade ⭐⭐⭐): Use
np.frompyfuncpara criar uma ufunc personalizada que retorna o maior de dois números. Aplique-a a dois arrays e compare comnp.maximum.