【问题标题】:Slicing after convolution , -1 index does not work卷积后切片,-1 索引不起作用
【发布时间】:2017-01-11 19:11:31
【问题描述】:

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

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    在 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
    

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

    【讨论】:

    • 布拉沃的解释:)
    猜你喜欢
    • 2017-03-17
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多