wake-up-neo.com

Netzgitterfunktionen in Python (meshgrid mgrid ogrid ndgrid)

Ich bin auf der Suche nach einem klaren Vergleich von netzähnlichen Funktionen. Leider finde ich es nicht!

Numpy http://docs.scipy.org/doc/numpy/reference/ liefert

  • mgrid

  • ogrid

  • meshgrid

Scitools http://hplgit.github.io/scitools/doc/api/html/index.html bietet

  • ndgrid

  • boxgrid

Idealerweise wäre eine Tabelle, die all dies zusammenfasst, perfekt!

63
scls

numpy.meshgrid wird nach dem Matlab-Befehl meshgrid modelliert. Es wird verwendet, um Funktionen von zwei Variablen zu vektorisieren, damit Sie schreiben können

x = numpy.array([1, 2, 3])
y = numpy.array([10, 20, 30]) 
XX, YY = numpy.meshgrid(x, y)
ZZ = XX + YY

ZZ => array([[11, 12, 13],
             [21, 22, 23],
             [31, 32, 33]])

ZZ enthält also alle Kombinationen von x und y, die in die Funktion eingefügt werden. Wenn Sie darüber nachdenken, ist meshgrid für numpy Arrays ein wenig überflüssig, da sie gesendet werden. Das heißt, du kannst es tun

XX, YY = numpy.atleast_2d(x, y)
YY = YY.T # transpose to allow broadcasting
ZZ = XX + YY

und das gleiche Ergebnis erhalten.

mgrid und ogrid sind Hilfsklassen, die die Indexnotation verwenden, sodass Sie in den vorherigen Beispielen XX und YY direkt erstellen können, ohne etwas wie linspace verwenden zu müssen. Die Reihenfolge, in der die Ausgabe generiert wird, wird umgekehrt.

YY, XX = numpy.mgrid[10:40:10, 1:4]
ZZ = XX + YY # These are equivalent to the output of meshgrid

YY, XX = numpy.ogrid[10:40:10, 1:4]
ZZ = XX + YY # These are equivalent to the atleast_2d example

Ich bin nicht mit dem Zeug von scitools vertraut, aber ndgrid scheint meshgrid zu entsprechen, während BoxGrid tatsächlich eine ganze Klasse ist, die bei dieser Art von Generation hilft.

71
chthonicdaemon

np.mgrid und np.meshgrid() machen dasselbe, aber die erste und die zweite Achse sind vertauscht

# 3D
d1, d2, d3 = np.mgrid[0:10, 0:10, 0:10]
d11, d22, d33 = np.meshgrid(np.arange(10),np.arange(10),np.arange(10))
np.array_equal(d1,d11)

ergibt False. Tauschen Sie einfach die ersten beiden Dimensionen aus:

d11 = np.transpose(d11,[1,0,2])
np.array_equal(d1,d11)

ergibt True

0
dopexxx