es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo actualizar eficientemente un numpy ndarray dado una lista de índices

Tengo un array de 4 dimensiones llamado new_arr. Dada una lista de índices, quiero actualizar new_arr basándome en un array antiguo que tengo almacenado, old_arr. Estoy usando un bucle for para hacer esto, pero es ineficiente. Mi código se parece a esto:

update_indices = [(2,33,1,8), (4,9,49,50), ...] # como ejemplo
for index in update_indices:
    i,j,k,l = index
    new_arr[i][j][k][l] = old_arr[i][j][k][l]

Está tardando mucho tiempo porque update_indices es grande. ¿Existe alguna forma de actualizar todos los elementos de una vez o hacerlo de manera más eficiente?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma más eficiente de actualizar new_arr utilizando la función de indexación avanzada de numpy. En lugar de usar un bucle for para actualizar cada elemento uno por uno, podemos utilizar la indexación para actualizar todos los elementos de una vez utilizando la lista update_indices. El código actualizado se vería así:

    new_arr[update_indices] = old_arr[update_indices]
    

    Al utilizar este método, numpy actualizará todos los elementos de una vez y será mucho más rápido que utilizar un bucle for. Esto se debe a que numpy utiliza un código C altamente optimizado para realizar las actualizaciones en bloques, lo cual es mucho más rápido que el bucle for de Python.

Comments are closed.