recorrer - matrices en python
Preponer el elemento a la matriz numpy (4)
Tengo la siguiente matriz numpy
import numpy as np
X = np.array([[5.], [4.], [3.], [2.], [1.]])
Quiero insertar [6.]
al principio. He intentado:
X = X.insert(X, 0)
¿Cómo me inserto en X?
Acabo de escribir un código que realiza esta operación ~ 100,000 veces, por lo que necesitaba descubrir la forma más rápida de hacerlo. No soy un experto en eficiencia de código de ninguna manera, pero podría resolver algunas cosas utilizando la función mágica %%timeit
en un cuaderno jupyter.
Mis hallazgos:
np.concatenate(([number],array))
requiere el menor tiempo. Llamémoslo 1 vez.
np.asarray([number] + list(array))
aparece en ~ 2x.
np.r_[number,array]
es ~ 4x.
np.insert(array,0,number)
parece ser la peor opción aquí en 8x.
No tengo idea de cómo cambia esto con el tamaño de la array
(utilicé una array
forma (15,) y la mayoría de las opciones que sugerí solo funcionan si desea colocar el número al principio. Sin embargo, dado que eso es lo que está preguntando la pregunta, creo que este es un buen lugar para hacer estas comparaciones.
Puedes probar lo siguiente
X = np.append(arr = np.array([[6]]), values = X, axis= 0)
En lugar de insertar 6 en la X existente, agregue 6 por X.
Entonces, el primer argumento arr
es la matriz numpy del escalar 6, el segundo argumento es la matriz que se agregará y el tercero es el lugar donde queremos agregar
Sé que esta es bastante antigua, pero una solución corta es utilizar trucos de corte de números:
np.r_[[[6.]], X]
Si necesita hacerlo en una segunda dimensión, puede usar np.c_.
Creo que esta es la versión menos abarrotada que puedo pensar
numpy tiene una función de insert
que es accesible a través de np.insert
con documentation .
Querrás usarlo en este caso así:
X = np.insert(X, 0, 6., axis=0)
el primer argumento X
especifica el objeto a insertar.
El segundo argumento 0
especifica dónde.
El tercer argumento 6.
especifica qué se va a insertar.
El cuarto argumento axis=0
especifica que la inserción debe ocurrir en la posición 0
para cada columna. Podríamos haber elegido filas, pero su X es un vector de columnas, así que pensé que nos mantendríamos consistentes.