What is the default value of j in (i:j:k) numpy slicing?
我一直在scipy.org上阅读numpy i:j:k切片的教程。在第二个例子之后,它说
Assume n is the number of elements in the dimension being sliced. Then, if i is not given it defaults to 0 for k > 0 and n - 1 for k < 0. If j is not given it defaults to n for k > 0 and -1 for k < 0. If k is not given it defaults to 1.
号
然而:
1 2 3 4 | >>> import numpy as np >>> x = np.array([0,1,2,3,4]) >>> x[::-1] array([4, 3, 2, 1, 0]) |
如果j默认为-1,那么
1 2 3 4 | >>> x[:-1:-1] array([], dtype=int64) >>> x[:-(len(x)+1):-1] array([4, 3, 2, 1, 0]) |
号
虽然
1 2 | >>> x[:-(len(x)+1):-1] array([4, 3, 2, 1, 0]) |
因此,当k<0时,j的默认值应该是-(n+1)。根据StackOverflow上的这篇文章,我认为k<0时j的"官方"默认值是
我是否误解了scipy.org的教程?
在第一级处理中,python解释器将
如你所说,
我怀疑
If j is not given it defaults to n for k > 0 and -1 for k < 0 .
号
不是故意这样的。相反,它的通常含义是-1,
在[285]中:np.arange(10)[切片(5,0,-1)]out[285]:数组([5,4,3,2,1])
那么,您如何包括
1 2 | In [287]: np.arange(10)[slice(5,-1,-1)] Out[287]: array([], dtype=int32) |
不起作用,因为
1 2 | In [289]: np.arange(10)[slice(5,-7,-1)] Out[289]: array([5, 4]) |
号
1 2 | In [286]: np.arange(10)[slice(5,None,-1)] Out[286]: array([5, 4, 3, 2, 1, 0]) |
这同样有效(
1 2 | In [291]: np.arange(10)[slice(5,-11,-1)] Out[291]: array([5, 4, 3, 2, 1, 0]) |
。
因此,在