Das Beispiel in der Frage ist nicht ganz klar - entweder zusätzliche Kommas fehlen oder zusätzliche brakets.
diese eine - Beispiel Bereiche 3, 4 der Übersichtlichkeit halber - liefert die Lösung für die erste Variante und erzeugt ein 2D-Array in Wirkung (wie die Frage Titel andeutet) - „Auflisten“ alle Koordinaten:
>>> np.indices((3,4)).reshape(2,-1).T
array([[0, 0],
[0, 1],
[0, 2],
[0, 3],
[1, 0],
[1, 1],
[1, 2],
[1, 3],
[2, 0],
[2, 1],
[2, 2],
[2, 3]])
die andere Variante wurde bereits in einer anderen Antwort gezeigt, indem sie 2x .swapaxes()
- aber auch mit einer np.rollaxis()
(oder den neuen np.moveaxis()
) getan werden könnte:
>>> np.rollaxis(np.indices((3,4)), 0, 2+1)
array([[[0, 0],
[0, 1],
[0, 2],
[0, 3]],
[[1, 0],
[1, 1],
[1, 2],
[1, 3]],
[[2, 0],
[2, 1],
[2, 2],
[2, 3]]])
>>> _[0,1]
array([0, 1])
Diese Methode funktioniert auch das gleiche für N-dimensionalen Indizes, z.B .:
>>> np.rollaxis(np.indices((5,6,7)), 0, 3+1)
Hinweis: Die Funktion np.indices
in die Tat (C-Geschwindigkeit) schnell für große Bereiche arbeitet.
Wie Sie es formatiert haben, sieht es so aus, als ob Sie ein 3D-Array mit Form (512, 512, 2) möchten ... aber das syntaktische Markup ist für ein 2D-Array mit Form (512 * 512, 2). Könnten Sie das klären? – lmjohns3