Saltar al contenido

¿Cómo creo un vacío? array/matriz en NumPy?

Te damos la bienvenida a proyecto online, en este sitio encontrarás la solucíon a lo que estabas buscando.

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 existente arrayla totalidad array debe copiarse en un nuevo bloque de memoria, creando espacios para que se almacenen los nuevos elementos. Esto es muy ineficiente si se hace repetidamente para construir un array.

En el caso de agregar filas, su mejor apuesta es crear un array que es tan grande como su conjunto de datos eventualmente será, y luego asígnele 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.]])

un número array 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 en el existente array se copia en uno nuevo. (Él append tendrá el mismo problema.) Si desea construir su matriz una columna a la vez, sería mejor que la mantuviera en una lista hasta que esté terminada, y solo entonces la convertiría en una array.

p.ej


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

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


mat = numpy.array(data)

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

EDITAR:

Si por alguna razón realmente desea crear un espacio vacío arraysolo puedes usar numpy.array([])¡pero esto rara vez es útil!

Para crear un multidimensional vacío array en NumPy (por ejemplo, un 2D array 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 el array en cada adición), puede reducir a 0 la dimensión a la que desea agregar: X = np.empty(shape=[0, n]).

De esta forma puedes 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.]]

Si haces scroll puedes encontrar las reseñas de otros programadores, tú igualmente tienes el poder insertar el tuyo si te apetece.

¡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 *