Python (i:j:k)numpy切片中j的默认值是多少?

Python (i:j:k)numpy切片中j的默认值是多少?,python,numpy,slice,Python,Numpy,Slice,我一直在阅读numpy I:j:k切片的教程。在第二个例子之后,它说 假设n是要切片的维度中的元素数。然后,如果没有给i,k>0时默认为0,k0时默认为n,k>将numpy作为np导入 >>>x=np.数组([0,1,2,3,4]) >>>x[:-1] 数组([4,3,2,1,0]) 如果j默认为-1,则x[:-1:-1]应等同于x[:-1],但 >>x[:-1:-1] 数组([],dtype=int64) >>>x[:-(len(x)+1):-1] 数组([4,3,2,1,0]) 当 >>

我一直在阅读numpy I:j:k切片的教程。在第二个例子之后,它说

假设n是要切片的维度中的元素数。然后,如果没有给i,k>0时默认为0,k<0时默认为n-1。如果未给出j,则k>0时默认为n,k<0时默认为-1。如果未指定k,则默认为1

然而:

>>将numpy作为np导入
>>>x=np.数组([0,1,2,3,4])
>>>x[:-1]
数组([4,3,2,1,0])
如果j默认为-1,则
x[:-1:-1]
应等同于
x[:-1]
,但

>>x[:-1:-1]
数组([],dtype=int64)
>>>x[:-(len(x)+1):-1]
数组([4,3,2,1,0])

>>x[:-(len(x)+1):-1]
数组([4,3,2,1,0])
因此,当k<0时,j的默认值应为-(n+1)。根据,我相信当k<0时j的“官方”默认值是
None


我是否误解了SciPy.org上的教程?

在第一级处理中,Python解释器将
符号转换为
切片
对象。这取决于
numpy.\uu getitem\uu
方法来解释这3个数字

[::-1]
切片(无,无,-1)
相同

正如您所注意到的,
x[slice(None,None,-1)]
x[slice(None,-1,-1)]
不同

我怀疑
-1
在:

如果未给出j,则k>0时默认为n,k<0时默认为-1。

不应该被那样对待。它的通常含义是-1,
0之前的数字

在[285]中:np.arange(10)[切片(5,0,-1)] Out[285]:数组([5,4,3,2,1])

j
被解释为迭代到但不包括该值,迭代方向由
k
确定。因此,
0
值不包括在此片中

那么,如何包含
0

In [287]: np.arange(10)[slice(5,-1,-1)]
Out[287]: array([], dtype=int32)
不工作,因为
-1
被理解为
n-1
,如:

In [289]: np.arange(10)[slice(5,-7,-1)]
Out[289]: array([5, 4])
None
以一种特殊的方式进行解释,使我们能够使用:

In [286]: np.arange(10)[slice(5,None,-1)]
Out[286]: array([5, 4, 3, 2, 1, 0])
这同样有效(
10-11=-1
-真实的
-1


因此,
-1
表示0
之前的
,与
-1
表示从n开始的
计数之间存在区别。文档对此可能很清楚,但这并没有错(如果您使用正确的-1)。

我认为可能有一段时间负指数从数组末尾算起就不算;您正在查看的文档行可能是从那个时候开始的。这很有意义。非常感谢。顺便说一句,谢谢你重新格式化我原来的帖子。我肯定应该了解更多关于StackOverflow的格式设置对于普通Python切片,它默认为
None
,但我不知道numpy。
In [291]: np.arange(10)[slice(5,-11,-1)]
Out[291]: array([5, 4, 3, 2, 1, 0])