Insertar elemento en la matriz numpy

Las listas tienen un método muy simple para insertar elementos:

a = [1,2,3,4] a.insert(2,66) print a [1, 2, 66, 3, 4] 

Para una matriz numpy podría hacer:

 a = np.asarray([1,2,3,4]) a_l = a.tolist() a_l.insert(2,66) a = np.asarray(a_l) print a [1 2 66 3 4] 

Pero esto es muy complicado.

¿Hay un insert equivalente para numpy matrices numpy ?

Puede usar numpy.insert , aunque a diferencia de list.insert , devuelve una nueva matriz porque las matrices en NumPy tienen un tamaño fijo.

 >>> import numpy as np >>> a = np.asarray([1,2,3,4]) >>> np.insert(a, 2, 66) array([ 1, 2, 66, 3, 4]) 

Si solo desea insertar elementos en índices consecuentes, como una forma más optimizada puede usar np.concatenate() para concatenar segmentos de la matriz con sus elementos np.concatenate() :

Por ejemplo en este caso puedes hacer:

 In [21]: np.concatenate((a[:2], [66], a[2:])) Out[21]: array([ 1, 2, 66, 3, 4]) 

Punto de referencia (5 veces más rápido que el insert ):

 In [19]: %timeit np.concatenate((a[:2], [66], a[2:])) 1000000 loops, best of 3: 1.43 us per loop In [20]: %timeit np.insert(a, 2, 66) 100000 loops, best of 3: 6.86 us per loop 

Y aquí hay un punto de referencia con matrices más grandes (aún 5 veces más rápido):

 In [22]: a = np.arange(1000) In [23]: %timeit np.concatenate((a[:300], [66], a[300:])) 1000000 loops, best of 3: 1.73 us per loop In [24]: %timeit np.insert(a, 300, 66) 100000 loops, best of 3: 7.72 us per loop 

Para agregar elementos a una matriz numpy, puede usar el método ‘adjuntar’ pasándole la matriz y el elemento que desea agregar. Por ejemplo:

import numpy as np dummy = [] dummy = np.append(dummy,12)

esto creará una matriz vacía y le agregará el número ’12’