Python切片语法[o:,:]的含义是什么?

4

我有一个可能非常简单的小问题。有人给了我以下代码行:

im = axs[0,i].pcolormesh(imgX[o:,:], imgY[o:,:], img.mean(-1)[o:,:], cmap='Greys')

我知道 “:” 表示该列或行中的所有内容(或数组深度,取决于您的观察角度)。但是 "o:" 代表什么呢?

3
那是NumPy的ndarray切片。o是某个变量。 - Ashwini Chaudhary
2个回答

3
下面的内容与使用无关,但展示了操作“被解析”的方式。
class X:
   def __getitem__(self, index):
       return index

X()[:,:]
>> (slice(None,None,None), slice(None,None,None))

并且使用不同的清晰度值:

X()[0, 1:, 3:4, 5:6:7]
>> (0, slice(1,None,None), slice(3,4,None), slice(5,6,7))

因此,请记住,img[o:,:] 就像 img[o:,:] 一样。

img.__getitem__( (slice(o,None,None), slice(None,None,None)) )

3
这个答案需要更多解释。它展示了具体哪些内部方法被调用以及使用了哪些参数,但没有解释这个切片的意义。如果我之前不知道NumPy的切片是如何工作的,阅读完这个答案后我仍然不会知道问题中的切片实际上做了什么。 - user2357112
@user2357112,我鼓励其他人发布答案并夺走“接受投票”的机会,特别是在numpy的情况下!这个答案是想要分享无法舒适地放在评论中的信息的结果;但遗憾的是,我自己不使用numpy。 - user2864740

2

o是一个像其他变量一样的变量(但它的名称非常糟糕,因为它可能会被误认为是零)。

[o:, :]表示“从第一个轴中的元素o开始的所有元素以及第二个轴中的所有元素。在您的特定情况下,图像将仅显示从o到底部的行。

我想补充说明的是,在这种情况下,您获得的是视图,即对原始数组的引用,因此实际上没有复制数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接