Cómo iniciar un array 2-D en Python

Jinku Hu 30 enero 2023
  1. Método de comprensión de listas para iniciar un array 2D
  2. Método de rang anidado para iniciar un array 2D
  3. Método NumPy para iniciar un array 2D
Cómo iniciar un array 2-D en Python

Esta guía tutorial introducirá diferentes métodos para iniciar un array 2-D en Python. En los siguientes ejemplos haremos un array de 2-D 3x5.

Método de comprensión de listas para iniciar un 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 comprensión de listas anidadas crea un array 2-D con el valor inicial de 0. Por supuesto, puede cambiar el valor inicial a cualquier valor que necesite asignar en su aplicación.

Método de rang anidado para iniciar un array 2D

Si no te importa el valor inicial en el array 2-D, el valor 0 podría incluso ser eliminado.

En 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]]

En Python 3.x

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

No podríamos usar simplemente range(x) para iniciar un array 2-D en Python 3.x porque range devuelve un objeto que contiene una secuencia de números enteros en Python 3.x, pero no una lista de números enteros como en Python 2.x.

range en Python 3.x es más similar a xrange en Python 2.x. El objeto range en Python 3.x es inmutable, por lo tanto, no asignas ítems a sus elementos.

Si necesitas asignar elementos, necesitas convertir el objeto range a 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] * N método para iniciar un array 2D

Una forma pythonica de iniciar un array 2-D podría 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]]

Aunque debemos ser cautelosos cuando usamos la multiplicación de listas porque simplemente crea una secuencia con múltiples veces referidas a un mismo objeto, nos sentimos aliviados de usar [0]*n aquí porque el objeto de datos 0 es inmutable, de modo que nunca tendremos problemas incluso con referencias al mismo objeto inmutable.

Método NumPy para iniciar un array 2D

Además del array nativa de Python, NumPy debería ser la mejor opción para crear un array de 2 dimensiones, o para ser más precisos, un array.

Podrías crear un array llena de ceros con numpy.ceros.

>>> 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.]])

O iniciar un array llena de ones con 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.]])

Incluso puede crear un nuevo array sin inicializar las entradas con 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
Es una mejor solución si quiere crear primero el array vacía y luego asignar los valores de los elementos. Pero ten en cuenta que en el array hay valores aleatorios, por lo que podría ser arriesgado si accedes a el array indexando antes de que se haya asignado el valor del índice correspondiente.
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

Artículo relacionado - Python Array