Ho una matrice numpy e voglio ottenere il "vicinato" del punto in questione. Di solito gli array che sto usando sono bidimensionali, ma il seguente esempio 1D illustra quello che sto cercando. Sewrapping around slices in Python/numpy
A = numpy.array([0,10,20,30,40,50,60,70,80,90])
Poi il (misura 5) quartiere di elemento 4 è [20,30,40,50,60]
, e questo può essere facilmente ottenuto facendo A[i-2:i+3]
.
Tuttavia, ho anche bisogno che i quartieri "avvolgano" i bordi dell'array, in modo che il vicinato dell'elemento 0 sia [80,90,0,10,20]
e il vicinato dell'elemento 9 sia [70,80,90,0,10]
. Non riesco a trovare un modo elegante per farlo, quindi finisco per dover usare una logica complicata e fastidiosa ogni volta che viene fuori (che è molto spesso per me). Nel caso 2D il vicinato di un punto sarebbe un array rettangolare.
Quindi la mia domanda è, c'è un modo pulito per esprimere questa operazione di "quartiere avvolgente" in numpy? Preferirei qualcosa che restituisca una porzione piuttosto che una copia, ma la leggibilità e la velocità sono le considerazioni più importanti.
nota che è fondamentalmente impossibile ottenere una visione di tale sottotrama in numpy; il sottoarray non può essere espresso usando una singola falcata per ciascun asse. –