Cómo iniciar una matriz 2-D en Python

  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

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 una matriz 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](https://docs.python.org/3/library/functions.html#func-range) 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 arreglo 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 de la matriz nativa de Python, numpy debería ser la mejor opción para crear una matriz de 2 dimensiones, o para ser más precisos, una matriz.

Podrías crear una matriz 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 una matriz 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 arreglo 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 la matriz vacía y luego asignar los valores de los elementos. Pero ten en cuenta que en la matriz hay valores aleatorios, por lo que podría ser arriesgado si accedes a la matriz indexando antes de que se haya asignado el valor del índice correspondiente.

comments powered by Disqus