卷积后切片,-1索引不起作用

时间:2016-09-04 03:19:02

标签: python numpy scipy

SO上找到Python中的N维数组卷积后 我现在面临着一个问题,我无法将其包裹起来。 由scipy.ndimage提供的卷积不允许像Matlab的convn那样选择卷积的“有效”部分,因此我们需要切出有效部分。

"valid = [slice(kernel.shape[0]//2, -kernel.shape[0]//2), slice(kernel.shape[1]//2, -kernel.shape[1]//2)]"

内核大小为[2x2],我不确定为什么我没有为内核的图像卷[24x24]获得有效切片。

z =  convolve(image,kernel)[valid]

作为回报,我得到一张[22x22]图像,我期待一张[23x23]图像。 因此,我检查了切片的值,似乎-1在这里不起作用。

进行手动切片

convolve(image,kernel)[1:-1,1:-1] ---> Gives 22x22
convolve(image,kernel)[1:,1:] ---> Gives 23x23

所以问题是......为什么-1给出了一个简单数组的最后一项,但在我切片的情况下忽略了它?

a= np.array([100,101,102])
a[-1]
102

1 个答案:

答案 0 :(得分:4)

在Python中,切片的上限是打开的

In [699]: np.arange(5)
Out[699]: array([0, 1, 2, 3, 4])
In [700]: np.arange(5)[:4]
Out[700]: array([0, 1, 2, 3])
In [701]: np.arange(5)[:-1]
Out[701]: array([0, 1, 2, 3])
In [702]: np.arange(5)[1:-1]
Out[702]: array([1, 2, 3])

在所有Python情况下,列表和数组,slice(1,-1)都会删除第一个和最后一个项目。 slice(1,None)(与x[1:]相同)仅删除第一个。

-1本身意味着最后一个;在切片中,它表示up to, but including, the last

In [703]: np.arange(5)[-1]
Out[703]: 4

我认为问题只是关于切片,并且适用于任何数组,无论它是否来自卷积。

相关问题