dtype array python numpy

python - dtype - numpy array



¿Cuál es la forma preferida de preasignar matrices NumPy? (1)

La asignación previa de mallocs a toda la memoria que necesita en una llamada, mientras que cambiar el tamaño de la matriz (mediante llamadas para agregar, insertar, concatenar o cambiar el tamaño) puede requerir copiar la matriz en un bloque de memoria más grande. Por lo tanto, tiene razón, se prefiere la preasignación a (y debería ser más rápido que) el cambio de tamaño.

Hay una serie de formas "preferidas" para preasignar matrices numpy dependiendo de lo que desee crear. Hay np.zeros , np.ones , np.empty , np.zeros_like , np.ones_like y np.empty_like , y muchos otros que crean matrices útiles como np.linspace y np.arange .

Asi que

ar0 = np.linspace(10, 20, 16).reshape(4, 4)

está bien si esto se acerca más al ar0 que deseas.

Sin embargo, para hacer la última columna todos los 1, creo que la forma preferida sería simplemente decir

ar0[:,-1]=1

Como la forma de ar0[:,-1] es (4,) , el 1 se broadcasted para coincidir con esta forma.

Soy nuevo en NumPy / SciPy. A partir de la documentación, parece más eficiente preasignar una matriz única en lugar de llamar a agregar / insertar / concatenar.

Por ejemplo, para agregar una columna de 1 a una matriz, creo que esto:

ar0 = np.linspace(10, 20, 16).reshape(4, 4) ar0[:,-1] = np.ones_like(ar0[:,0])

Se prefiere a esto:

ar0 = np.linspace(10, 20, 12).reshape(4, 3) ar0 = np.insert(ar0, ar0.shape[1], np.ones_like(ar0[:,0]), axis=1)

mi primera pregunta es si esto es correcto (que el primero es mejor), y mi segunda pregunta es, en este momento, simplemente estoy preasignando mis arreglos de esta manera (como noté en varios ejemplos de libros de cocina en el sitio de SciPy):

np.zeros((8,5))

¿Cuál es la forma ''preferida por NumPy'' de hacer esto?