假设我有下面的numpy数组:
>>> a = np.arange(0,21,1)
>>> a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
现在假设我想选择一个长度为N
的窗口,其中2 < N <= a.shape[0]
,使得窗口以数组a
中的一个元素为中心。例如,如果我想以数组a
中的元素10
为中心设置一个长度为N = 5
的窗口,那么这个窗口将是:
>>> idx = 10 # index of the array element 10
>>> N = 5 # window size
>>> a[idx - N//2:idx + N//2 + 1]
array([ 8, 9, 10, 11, 12])
这个方法可以很好地推广到不在数组边缘附近的窗口,但是我不能让它工作。例如,如果我想在a
中的元素2
周围提取一个长度为N = 7
的窗口,那么我得到的是:
>>> idx = 2
>>> N = 7
>>> a[idx - N//2:idx + N//2 + 1]
array([], dtype=int32)
但是我想要的是:
>>> a[0:7]
array([0, 1, 2, 3, 4, 5, 6])
如何将此方法推广到a
边缘附近的窗口?
3条答案
按热度按时间0x6upsns1#
尝试:
注意,这不是以
idx=2
为中心。xbp102n02#
基于Quang Hoang's answer,以下是工作原理:
ckocjqey3#
如果是一个小数组,使用take和wrap,在一行中更易读:
如果它很大,性能可能是一个问题,您可以使用视图,请参阅:Numpy子数组和相对索引。