L'esempio nella questione non è del tutto chiaro - o virgole in più sono mancanti o parentesi extra.
Questo - esempio gamme 3, 4 per chiarezza - fornisce la soluzione per la prima variante e produce una matrice 2D in effetti (come il titolo della domanda suggerisce) - "lista" tutte le coordinate:
>>> 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]])
l'altra variante è stato già mostrato in un'altra risposta utilizzando 2x .swapaxes()
- ma potrebbe anche essere fatto con uno np.rollaxis()
(o la nuova np.moveaxis()
):
>>> 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])
Questo metodo funziona anche lo stesso per indici N-dimensionali, per es .:
>>> np.rollaxis(np.indices((5,6,7)), 0, 3+1)
Nota: La funzione np.indices
funziona davvero (C-velocità) veloce per grandi cucine.
Il modo in cui lo hai formattato, sembra che tu voglia una matrice 3D di forme (512, 512, 2) ... ma il markup sintattico che hai dato è per una matrice 2D di forme (512 * 512, 2). Potresti chiarire? – lmjohns3