numpy.meshgrid
ist nach Matlabs meshgrid
Befehl modelliert . Es wird verwendet, um Funktionen von zwei Variablen zu vektorisieren, so dass 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]])
So ZZ
enthält alle Kombinationen von x
und y
in die Funktion setzen. Wenn Sie darüber nachdenken, meshgrid
ist es für numpy Arrays, wie sie senden, etwas überflüssig. Das heißt, Sie können tun
XX, YY = numpy.atleast_2d(x, y)
YY = YY.T
ZZ = XX + YY
und erhalten das gleiche Ergebnis.
mgrid
und ogrid
sind Hilfsklassen, die die Indexnotation verwenden, damit Sie XX
und YY
in den vorherigen Beispielen direkt erstellen können , ohne etwas wie verwenden zu müssen linspace
. Die Reihenfolge, in der die Ausgabe generiert wird, ist umgekehrt.
YY, XX = numpy.mgrid[10:40:10, 1:4]
ZZ = XX + YY
YY, XX = numpy.ogrid[10:40:10, 1:4]
ZZ = XX + YY
Ich bin nicht mit den Scitools vertraut, aber es ndgrid
scheint gleichwertig zu sein meshgrid
, während BoxGrid
es tatsächlich eine ganze Klasse ist, um bei dieser Art von Generation zu helfen.
XX = XX.T
, sollte es wirklich seinYY = YY.T
. Dies wird deutlich, wenn x und y unterschiedlich sind.np.mgrid
undnp.meshgrid()
machen Sie dasselbe, aber die erste und die zweite Achse werden 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
.quelle