Como iniciar a array 2-D em Python

Jinku Hu 30 janeiro 2023
  1. Método de compreensão de lista para iniciar um array 2D
  2. Método de range aninhado para iniciar um array 2D
  3. Método NumPy para iniciar um array 2D
Como iniciar a array 2-D em Python

Este guia tutorial irá introduzir diferentes métodos para iniciar um array 2-D em Python. Vamos fazer um array 3x5 2-D nos seguintes exemplos.

Método de compreensão de lista para iniciar um array 2D

>>> column, row = 3, 5
>>> array2D = [[0 for _ in range(row)] for _ in range(column)]
>>> array2D
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Este método de compreensão de lista aninhada cria um array 2-D com o valor inicial como 0. Claro, você pode alterar o valor inicial para qualquer valor que você precise atribuir em sua aplicação.

Método de range aninhado para iniciar um array 2D

Se você não se importa com o valor inicial no array 2-D, o valor 0 pode até ser eliminado.

Em Python 2.x

>>> column, row = 3, 5
>>> A = [range(row) for _ in range(column)]
>>> A
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

Em Python 3.x

>>> column, row = 3, 5
>>> A = [range(row) for _ in range(column)]
>>> A
[range(0, 5), range(0, 5), range(0, 5)]

Nós não poderíamos simplesmente utilizar range(x) para iniciar o array 2-D em Python 3.x porque range retorna um objeto contendo uma seqüência de inteiros em Python 3.x, mas não uma lista de inteiros como em Python 2.x.

range em Python 3.x é mais similar ao xrange em Python 2.x. O objeto range em Python 3.x é imutável, portanto, você não atribui itens aos seus elementos.

Se você precisa de atribuição de itens, você precisa converter o objeto range para o objeto list.

>>> A = [list(range(row)) for _ in range(column)]
>>> A
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

[0] * método n para iniciar um array 2D

Uma forma pitônica de iniciar um array 2-D poderia ser

>>> column, row = 3, 5
>>> A = [[0]*row for _ in range(column)]
>>> A
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Embora devamos ser cautelosos quando usamos multiplicação de lista porque ela simplesmente cria uma seqüência com múltiplas referências a um mesmo objeto, estamos aliviados em usar [0]*n aqui porque o objeto de dados 0 é imutável para que nunca encontremos problemas mesmo com referências ao mesmo objeto imutável.

Método NumPy para iniciar um array 2D

Além da array nativa Python, NumPy deve ser a melhor opção para criar uma array 2D, ou para ser mais preciso, uma array.

Você poderia criar uma array cheia de zeros com numpy.zeros.

>>> import numpy as np
>>> column, row = 3, 5
>>> np.zeros(column, row)
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])

Ou iniciar uma array preenchida com ones com numpy.ones.

>>> import numpy as np
>>> column, row = 3, 5
>>> np.ones((column, row))
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

Você poderia até criar um novo array sem inicializar as entradas com numpy.empty.

>>> import numpy as np
>>> column, row = 3, 5
>>> np.empty((5,5))
array([[6.23042070e-307, 4.67296746e-307, 1.69121096e-306,
        1.33511562e-306, 1.89146896e-307],
       [7.56571288e-307, 3.11525958e-307, 1.24610723e-306,
        1.37962320e-306, 1.29060871e-306],
       [2.22518251e-306, 1.33511969e-306, 1.78022342e-306,
        1.05700345e-307, 1.11261027e-306],
       [1.11261502e-306, 1.42410839e-306, 7.56597770e-307,
        6.23059726e-307, 1.42419530e-306],
       [7.56599128e-307, 1.78022206e-306, 8.34451503e-308,
        2.22507386e-306, 7.20705877e+159]])
Notas
É uma solução melhor se você quiser criar primeiro a array vazia e depois atribuir os valores dos elementos mais tarde. Mas esteja ciente de que valores aleatórios estão no array para que possa ser arriscado se você acessar o array através da indexação antes que o valor do índice correspondente tenha sido atribuído.
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - Python Array