Optimierung des 3D-Array-Algorithmus mit Numpy Silces [Duplikat]

Sep 23 2020

Arbeiten an einem 3D-Numpy-Array von Zahlen, bei dem die darin enthaltenen Werte mit festgelegten Gewichten multipliziert, summiert und aktualisiert werden.

Ich habe ein 3d-numpy-Array "Gitter" mit Abmessungen (H, W, 3), in dem ich einige konstante Gewichte mit den 3 inneren Werten multiplizieren, sie dann summieren und das Array mit der Summe aktualisieren möchte. Ich habe dazu den folgenden Python-Algorithmus geschrieben:

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]

Dies funktioniert wie beabsichtigt, und jetzt möchte ich die Geschwindigkeit / Länge des Codes optimieren, indem ich mehr numpy-Methoden verwende, wie z. B. das Schneiden von Arrays, um einige for-Schleifen zu entfernen. Ich bin noch neu in Numpy und Lernen und habe mich gefragt, wie ich das tun könnte.

Antworten

1 scleronomic Sep 23 2020 at 20:42

Das ist eigentlich ziemlich einfach:

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