Arrays estruturados em NumPy: como criar registros com campos nomeados em Python

Por
Publicado em
2 min. de leitura

Fala, meus consagrados! Beleza?

Neste artigo, vamos estudar os arrays estruturados em NumPy, um recurso que permite criar arrays cujos elementos funcionam como registros com campos nomeados. Na prática, esse tipo de array lembra uma tabela, em que cada registro pode ter campos como id, nome, salario, x ou y, e cada campo pode possuir um tipo de dado específico definido no dtype . Esse assunto é especialmente importante para quem estuda Python para concursos de TI, pois envolve interpretação de código, tipos de dados, acesso por campos e análise correta de atributos como size, ndim e shape.

Terças e quintas de TI. Conteúdo prático e artigos especializados para acelerar seu conhecimento. Acesse agora!

O NumPy permite criar arrays estruturados. Um array estruturado possui elementos que funcionam como registros, com campos nomeados.

Esse recurso lembra uma tabela, em que cada campo possui um nome e um tipo.

Exemplo:

import numpy as np
arrei = np.array(
      [(1, 2), (3, 4), (5, 6)],
      dtype=[('x', 'i4'), ('y', 'i4')]
)
print(arrei)
print(arrei.dtype)
print(arrei.size)
print(arrei.ndim)
print(arrei.shape)
print(arrei['x'], arrei['y'])
print(arrei[0], arrei[1], arrei[2])

Resultado da execução:

[(1, 2) (3, 4) (5, 6)]
[('x', '<i4'), ('y', '<i4')]
3
1
(3,)
[1 3 5] [2 4 6]
(1, 2) (3, 4) (5, 6)

O array possui três registros:

  • (1, 2);
  • (3, 4);
  • (5, 6).

Cada registro possui dois campos:

  • Campo x:
    • Tipo i4;
    • Inteiro de 4 bytes;
  • Campo y:
    • Tipo i4;
    • Inteiro de 4 bytes.

O array tem:

  • size = 3, pois existem 3 registros;
  • ndim = 1, pois é um vetor de registros;
  • shape = (3,), não (3, 2).

Esse detalhe é fundamental.

Embora cada registro tenha dois campos, esses campos não representam uma segunda dimensão. Eles fazem parte do tipo estruturado do elemento.

Portanto print(arrei.shape) retorna (3,) e não (3, 2).

Em arrays estruturados, é possível acessar os campos pelo nome.

Exemplo:

import numpy as np
arrei = np.array(
     [(1, 2), (3, 4), (5, 6)],
     dtype=[('x', 'i4'), ('y', 'i4')]
)
print(arrei['x'])
print(arrei['y'])

Resultado da execução:

[1 3 5]
[2 4 6]

Explicação:

  • arrei[‘x’] retorna todos os valores do campo x; e
  • arrei[‘y’] retorna todos os valores do campo y.

Também é possível acessar registros individualmente:

print(arrei[0])
print(arrei[1])
print(arrei[2])

Resultado da execução:

(1, 2)
(3, 4)
(5, 6)

Arrays estruturados podem ter campos de tipos diferentes.

Exemplo:

import numpy as np
linguagens = [(15, 'Java', 18125.35), (19, 'Python', 23535.5)]
arrei = np.array(
      linguagens,
      dtype=[('id', 'i4'), ('nome', 'U10'), ('salario', 'f4')]
)
print(arrei)
print(arrei.dtype)
print(arrei.size)
print(arrei.ndim)
print(arrei.shape)
print(arrei['id'], arrei['nome'], arrei['salario'])
print(arrei[0], arrei[1])

Resultado da execução:

[(15, 'Java', 18125.35) (19, 'Python', 23535.5)]
[('id', '<i4'), ('nome', '<U10'), ('salario', '<f4')]
2
1
(2,)
[15 19] ['Java' 'Python'] [18125.35 23535.5 ]
(15, 'Java', 18125.35) (19, 'Python', 23535.5)

Nesse exemplo, cada registro possui três campos:

  • Campo id:
    • Tipo i4;
    • Inteiro de 4 bytes;
  • Campo nome:
    • Tipo U10;
    • String Unicode de até 10 caracteres;
  • Campo salario:
    • Tipo f4;
    • Float de 4 bytes.

O array possui dois registros, portanto:

  • size = 2;
  • ndim = 1;
  • shape = (2,).

Espero que tenham gostado! 

Forte abraço e até a próxima jornada!

Por
Publicado em
2 min. de leitura

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *