Ich habe eine 3D-Daten und möchte Durchschnittsprodukt von Datenpunkten in allen möglichen Entfernungen vom Ursprung berechnen. Ich habe ein riesiges Raster (128^3-1024^3) und was ich jetzt mache, gibt keine Antwort in Stunden.Berechnungen mit numpy roll über 3D-Daten
# u read from a file
import numpy as np
for icx in range(0,128):
for icy in range(0,128):
for icz in range(0,128):
cukin[icx,icy,icz] = np.mean((u*np.roll(np.roll(np.roll(u,icx, axis=0),icy, axis=1),icz, axis=2))
Gibt es eine Möglichkeit, Schleifen in diesem Problem zu vermeiden?
Toy Beispiel:
cukin = np.zeros((2,2,2))
u = np.mgrid[1:5:1,1:5:1,1:5:1]
for icx in range(0,2):
for icy in range(0,2):
for icz in range(0,2):
cukin[icx,icy,icz] = np.mean((u*np.roll(np.roll(np.roll(u,icx, axis=0),icy, axis=1),icz, axis=2)))
Gibt cukin
[[[ 7.5 7. ]
[ 7. 6.5 ]]
[[ 6.25 6.25]
[ 6.25 6.25]]]
Sie können den Roll-Befehl vereinfachen: 'np.roll (a, (i, j, k))' ist gültig. – VBB
@VBB das würde Schleifen immer noch nicht vermeiden. Das Durchlaufen von Schleifen ist zeitaufwendig. –
Machen Sie eine Spielzeugversion Ihres Programms mit eingegebenen Daten, damit wir es ausführen können. –