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