如何从具有周期性边界条件的numpy数组中选择一个窗口?
发布于 2021-01-29 18:08:24
假设我制作一个二维数组,如下所示:
>>> A=np.arange(16).reshape((4,4))
>>> A
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
并且我希望能够围绕任何给定的元素选择一个3x3的窗口,以便该窗口围绕边界包裹,我该怎么做?我知道如果窗口的边界不与原始数组的边界重叠,我可以这样做:
>>> A[1:4,0:3]
array([[ 4, 5, 6],
[ 8, 9, 10],
[12, 13, 14]])
但是,如果我使用类似的表达式,A[i-1:i+2,j-1:j+2]
则仅对于i = 0,例如j = 0,返回一个空数组。
关注者
0
被浏览
53
1 个回答
-
import numpy as np A=np.arange(16).reshape((4,4)) def neighbors(arr,x,y,n=3): ''' Given a 2D-array, returns an nxn array whose "center" element is arr[x,y]''' arr=np.roll(np.roll(arr,shift=-x+1,axis=0),shift=-y+1,axis=1) return arr[:n,:n] print(A) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11] # [12 13 14 15]] print(neighbors(A,0,0)) # [[15 12 13] # [ 3 0 1] # [ 7 4 5]] print(neighbors(A,1,0)) # [[ 3 0 1] # [ 7 4 5] # [11 8 9]]