gpt4 book ai didi

python - 如何从具有周期性边界条件的 numpy 数组中选择一个窗口?

转载 作者:太空狗 更新时间:2023-10-29 17:17:46 26 4
gpt4 key购买 nike

假设我像这样制作一个二维数组:

>>> 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示例。

最佳答案

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]]

关于python - 如何从具有周期性边界条件的 numpy 数组中选择一个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4148292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com