Ottimizzazione dell'algoritmo 3d-array utilizzando numpy silces [duplicato]
Sep 23 2020
Lavorando su un problema di array di numeri 3d-numpy che moltiplica i valori all'interno di un set di pesi, li somma e li aggiorna.
Ho una "griglia" di array 3D-numpy con dimensioni (H, W, 3), dove voglio moltiplicare in alcuni pesi costanti per i 3 valori interni, quindi sommarli insieme e aggiornare l'array con la somma. Ho scritto il seguente algoritmo Python per questo:
weights = (0.65, 0.33, 0.07)
for i in range(len(grin)):
for j in range(len(grid[i])):
sum = 0
for k in range(3):
sum += grid[i][j][k] * weights[k]
grid[i][j] = [sum]
Funziona come previsto e ora vorrei ottimizzare la velocità / lunghezza del codice utilizzando più metodi numpy, come l'affettatura dell'array per tagliare alcuni cicli for. Sono ancora nuovo a numpy e all'apprendimento, e mi chiedevo quali potrebbero essere i modi per farlo?
Risposte
1 scleronomic Sep 23 2020 at 20:42
Questo è in realtà piuttosto semplice:
h, w = 20, 40
grid = np.random.random((h, w, 3))
weights = (0.65, 0.33, 0.07)
image = (grid * weights).sum(axis=-1)
# np.allclose(image, image2)
# True