Ho una grande matrice tridimensionale in numpy (diciamo dimensione 100x100x100). Mi piacerebbe ripetere più volte solo alcune parti di esso (circa il 70% degli elementi) e ho una matrice booleana che ha le stesse dimensioni e definisce se l'elemento deve avere l'operazione eseguita o meno.Come velocizzare l'iterazione su parte di un array numpy
mio metodo attuale è alla prima di creare un array "coordinate" di forma (N, 3) che contiene tutte le coordinate su cui eseguire l'operazione e quindi
for i in np.arange(many_iterations):
for j in coords:
large_array[j] = do_something(large_array[tuple(j)])
Sarebbe infatti essere meglio per valutare l'intero array e includere un'operazione extra nel ciclo per testare l'array booleano (tenere presente che la valutazione della verità viene eseguita più volte in più volte anziché una sola volta). Il mio pensiero era che il pay off in questo caso sarebbe sbarazzarsi del cicli for
large_array = do_something(large_array if condition True)
Come sarebbe questa ultima linea essere effettuato a lavorare in questo caso?
A seconda di cosa sia "do_qualcosa", potresti essere in grado di eseguire 'large_array [boolean_array] = do_something (large_array [boolean_array])' o qualcosa di più breve ancora. –
Penso che il tuo sentimento sia corretto, potrebbe essere a tuo vantaggio fare l'operazione sull'intero array e quindi usare qualcosa come "nump.where". –