在 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
答案 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
我认为问题只是关于切片,并且适用于任何数组,无论它是否来自卷积。