gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:11 25 4
gpt4 key购买 nike

在通过 Python 中的 N 维数组卷积后,可以在 SO 上找到我现在面临一个我无法解决的问题。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 中,切片的上限是开放的

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 本身意味着最后一个;在切片中,它表示直到但包括最后一个

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

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

关于python - 卷积后切片,-1 索引不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39313232/

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