NumPy: Arrays Estruturados

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

1. O que Você Aprenderá



2. Conceitos-Chave

PYTHON
import numpy as np

# Definir dtype estruturado
dt = np.dtype([('name', 'U10'), ('age', 'i4'), ('salary', 'f8')])

# Criar array
employees = np.array([
    ('Alice', 30, 75000.0),
    ('Bob', 25, 62000.0),
    ('Charlie', 35, 85000.0),
    ('Diana', 28, 71000.0)
], dtype=dt)

# Acessar campos
print(employees['name'])     # ['Alice' 'Bob' 'Charlie' 'Diana']
print(employees['salary'])   # [75000. 62000. 85000. 71000.]

# Record array (acesso por atributo)
emp_rec = np.rec.array(employees)
print(emp_rec.name)          # ['Alice' 'Bob' 'Charlie' 'Diana']
print(emp_rec.salary)        # [75000. 62000. 85000. 71000.]

# Filtragem
print(employees[employees['salary'] > 70000]['name'])
# ['Alice' 'Charlie']

# Ordenação
sorted_emp = np.sort(employees, order='salary')
print(sorted_emp['name'])  # ['Bob' 'Diana' 'Alice' 'Charlie']
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: Criando e acessando arrays estruturados (Dificuldade ⭐)

PYTHON
import numpy as np

dt = np.dtype([('product', 'U15'), ('price', 'f8'), ('quantity', 'i4')])

inventory = np.array([
    ('Widget', 9.99, 100),
    ('Gadget', 24.99, 50),
    ('Doohickey', 4.99, 200),
    ('Thingamajig', 14.99, 75)
], dtype=dt)

print("Produtos:", inventory['product'])
print("Preços:", inventory['price'])
print("Valor total:", np.sum(inventory['price'] * inventory['quantity']))

Output:

TEXT 📖 Somente leitura
Produtos: ['Widget' 'Gadget' 'Doohickey' 'Thingamajig']
Preços: [ 9.99 24.99  4.99 14.99]
Valor total: 4396.0

▶ Exemplo: Filtrando arrays estruturados (Dificuldade ⭐⭐)

PYTHON
import numpy as np

dt = np.dtype([('name', 'U15'), ('age', 'i4'), ('salary', 'f8')])
employees = np.array([
    ('Alice', 30, 75000), ('Bob', 25, 62000),
    ('Charlie', 35, 85000), ('Diana', 28, 71000),
    ('Eve', 45, 95000), ('Frank', 32, 78000)
], dtype=dt)

# Filtrar: salário > 70000 E idade < 40
mask = (employees['salary'] > 70000) & (employees['age'] < 40)
filtered = employees[mask]
print("Filtrados:", filtered['name'])

# Salário médio por faixa etária
young = employees[employees['age'] < 30]
print("Salário médio jovens:", young['salary'].mean())

Output:

TEXT 📖 Somente leitura
Filtrados: ['Alice' 'Charlie' 'Frank']
Salário médio jovens: 66500.0

▶ Exemplo: Ordenando arrays estruturados por campo (Dificuldade ⭐⭐)

PYTHON
import numpy as np

dt = np.dtype([('city', 'U15'), ('population', 'i4'), ('area', 'f8')])
cities = np.array([
    ('Tokyo', 13960000, 2194), ('Delhi', 16780000, 1484),
    ('Shanghai', 24870000, 6341), ('Mumbai', 12440000, 603),
    ('Beijing', 21540000, 16411)
], dtype=dt)

# Ordenar por população decrescente
by_pop = np.sort(cities, order='population')[::-1]
print("Por população:", by_pop['city'])

# Ordenar por densidade (população / área)
density = cities['population'] / cities['area']
dense_idx = np.argsort(-density)
print("Por densidade:", cities['city'][dense_idx])

Output:

TEXT 📖 Somente leitura
Por população: ['Shanghai' 'Beijing' 'Delhi' 'Tokyo' 'Mumbai']
Por densidade: ['Mumbai' 'Delhi' 'Tokyo' 'Shanghai' 'Beijing']

P: Quando devo usar arrays estruturados vs Pandas? R: Use arrays estruturados quando precisa da velocidade e eficiência de memória do NumPy para operações homogêneas. Use Pandas para análise de dados mais complexa com rotulagem, agrupamento e tratamento de dados ausentes.

P: Posso adicionar campos a um array estruturado existente? R: Não — arrays estruturados têm um dtype fixo. Crie um novo dtype com os campos adicionais e copie os dados. Use np.lib.recfunctions.append_fields por conveniência.

P: Qual é a diferença entre array estruturado e recarray? R: recarray (record array) permite acesso por atributo (emp.name) além do acesso por campo (emp['name']). É ligeiramente mais lento, mas mais conveniente.


❓ 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 ⭐): Crie um array estruturado com campos: produto (U20), preço (f8), quantidade (i4). Adicione 5 produtos.

  2. Intermediário (Dificuldade ⭐⭐): Do array de produtos, filtre itens com preço > 50 e quantidade < 10. Ordene por preço decrescente.

  3. Desafio (Dificuldade ⭐⭐⭐): Use np.lib.recfunctions para adicionar um campo 'total_value' (preço × quantidade) ao array. Verifique o cálculo.

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%