Saltar al contenido

¿Cómo creo una matriz / matriz vacía en NumPy?

Solución:

Tienes el modelo mental equivocado para usar NumPy de manera eficiente. Las matrices NumPy se almacenan en bloques contiguos de memoria. Si desea agregar filas o columnas a una matriz existente, la matriz completa debe copiarse en un nuevo bloque de memoria, creando espacios para que se almacenen los nuevos elementos. Esto es muy ineficaz si se hace repetidamente para construir una matriz.

En el caso de agregar filas, su mejor opción es crear una matriz que sea tan grande como su conjunto de datos eventualmente será, y luego asignarle datos fila por fila:

>>> import numpy
>>> a = numpy.zeros(shape=(5,2))
>>> a
array([[ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])
>>> a[0] = [1,2]
>>> a[1] = [2,3]
>>> a
array([[ 1.,  2.],
   [ 2.,  3.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])

Una matriz NumPy es una estructura de datos muy diferente de una lista y está diseñada para usarse de diferentes maneras. Tu uso de hstack es potencialmente muy ineficiente … cada vez que lo llama, todos los datos de la matriz existente se copian en una nueva. (Los append La función tendrá el mismo problema.) Si desea construir su matriz una columna a la vez, lo mejor sería mantenerla en una lista hasta que esté terminada, y solo entonces convertirla en una matriz.

p.ej


mylist = []
for item in data:
    mylist.append(item)
mat = numpy.array(mylist)

item puede ser una lista, una matriz o cualquier iterable, siempre que cada item tiene el mismo número de elementos.
En este caso particular (data es algo iterable sosteniendo las columnas de la matriz) simplemente puede usar


mat = numpy.array(data)

(También tenga en cuenta que el uso de list como nombre de variable probablemente no sea una buena práctica, ya que enmascara el tipo incorporado con ese nombre, lo que puede provocar errores).

EDITAR:

Si por alguna razón realmente desea crear una matriz vacía, puede usar numpy.array([]), ¡pero esto rara vez es útil!

Para crear una matriz multidimensional vacía en NumPy (por ejemplo, una matriz 2D m*n para almacenar su matriz), en caso de que no sepa m cuántas filas agregará y no le importa el costo computacional que mencionó Stephen Simmons (es decir, reconstruir la matriz en cada agregado), puede comprimir a 0 la dimensión a la que desea agregar: X = np.empty(shape=[0, n]).

De esta manera puede usar, por ejemplo (aquí m = 5 que asumimos que no sabíamos al crear la matriz vacía, y n = 2):

import numpy as np

n = 2
X = np.empty(shape=[0, n])

for i in range(5):
    for j  in range(2):
        X = np.append(X, [[i, j]], axis=0)

print X

que te dará:

[[ 0.  0.]
 [ 0.  1.]
 [ 1.  0.]
 [ 1.  1.]
 [ 2.  0.]
 [ 2.  1.]
 [ 3.  0.]
 [ 3.  1.]
 [ 4.  0.]
 [ 4.  1.]]
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *