Hola, tengo 1000 series de datos con 1500 puntos en cada una.

Forman una matriz Numpy de tamaño (1000x1500) creada usando np.zeros ((1500, 1000)) y luego se llenan con los datos.

Ahora, ¿qué pasa si quiero que la matriz crezca para decir 1600 x 1100? ¿Tengo que agregar matrices usando hstack y vstack o hay una mejor manera?

Me gustaría que los datos que ya están en la pieza de 1000x1500 de la matriz no se cambien, solo se agreguen datos en blanco (ceros) en la parte inferior y derecha, básicamente.

Gracias.

7
Thomas Browne 15 dic. 2009 a las 23:02

4 respuestas

La mejor respuesta

Si desea ceros en los elementos agregados, my_array.resize((1600, 1000)) debería funcionar. Tenga en cuenta que esto difiere de numpy.resize(my_array, (1600, 1000)), en el que las líneas anteriores están duplicadas, lo que probablemente no sea lo que desea.

De lo contrario (por ejemplo, si desea evitar inicializar elementos a cero, lo que podría ser innecesario), puede usar hstack y vstack para agregar una matriz que contenga los nuevos elementos; numpy.concatenate() (ver pydoc numpy.concatenate) también debería funcionar (es más general, por lo que yo entiendo).

En cualquier caso, supongo que se debe asignar un nuevo bloque de memoria para extender la matriz, y que todos estos métodos toman aproximadamente el mismo tiempo.

3
Eric O Lebigot 15 dic. 2009 a las 21:12

Debe usar reshape () y / o resize () según sus requisitos precisos.

Si desea un capítulo y un verso de los autores, probablemente sea mejor que lo publique en el panel de discusión.

0
Simon 16 dic. 2009 a las 09:02

Pase lo que pase, se quedará atascado reasignando un trozo de memoria, por lo que realmente no importa si usa arr.resize(), np.concatenate, hstack/vstack, etc. Tenga en cuenta que si usted ' Al acumular muchos datos secuencialmente, las listas de Python suelen ser más eficientes.

2
dwf 16 dic. 2009 a las 18:06

Esto debería hacer lo que desee ( es decir, , utilizando una matriz 3x3 y una matriz 4x4 para representar las dos matrices en el OP)

>>> import numpy as NP
>>> a = NP.random.randint(0, 10, 9).reshape(3, 3)
>>> a
>>> array([[1, 2, 2],
           [7, 0, 7],
           [0, 3, 0]])

>>> b = NP.zeros((4, 4))

mapeo de a a b:

>>> b[:3,:3] = a

>>> b
    array([[ 1.,  2.,  2.,  0.],
           [ 7.,  0.,  7.,  0.],
           [ 0.,  3.,  0.,  0.],
           [ 0.,  0.,  0.,  0.]])
9
doug 22 ene. 2013 a las 22:36