Mam tablicę numpy i chcę uzyskać "sąsiedztwo" i-tego punktu. Zazwyczaj używane przeze mnie tablice są dwuwymiarowe, ale poniższy przykład 1D ilustruje to, czego szukam. Jeślizawijanie wokół plasterków w Pythonie/numpy
A = numpy.array([0,10,20,30,40,50,60,70,80,90])
Wtedy (rozmiar 5) sąsiedztwo elementu 4 jest [20,30,40,50,60]
, i można to łatwo uzyskać, wykonując A[i-2:i+3]
.
Potrzebuję jednak również okolic, aby "zawinąć" krawędzie tablicy tak, aby sąsiedztwo elementu 0 było [80,90,0,10,20]
, a sąsiedztwo elementu 9 to [70,80,90,0,10]
. Nie mogę znaleźć eleganckiego sposobu na zrobienie tego, więc w końcu muszę użyć jakiejś skomplikowanej, denerwującej logiki za każdym razem, kiedy to się pojawi (co bardzo często jest dla mnie). W przypadku 2D sąsiedztwo punktu będzie prostokątnym układem.
Moje pytanie brzmi, czy jest jakiś sposób na wyrażenie tej "otaczającej okolicy" operacji numpy? Wolałbym coś, co zwraca fragment niż kopię, ale czytelność i szybkość to najważniejsze kwestie.
Zauważ, że zasadniczo nie można uzyskać widoku takiej podprzestrzeni w numpy; subarray nie może być wyrażony za pomocą pojedynczego kroku dla każdej osi –