【问题标题】:What is the default value of j in (i:j:k) numpy slicing?(i:j:k) numpy 切片中 j 的默认值是多少?
【发布时间】:2015-09-17 16:06:54
【问题描述】:

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

假设 n 是被切片的维度中的元素数。然后,如果没有给出 i,它默认为 0 代表 k > 0n - 1 代表 k 。如果 j 没有给出,它默认为 n 代表 k > 0-1 代表 k 。如果没有给出 k,则默认为 1。

但是:

>>> import numpy as np
>>> x = np.array([0,1,2,3,4])
>>> x[::-1]
array([4, 3, 2, 1, 0])

如果j默认为-1,那么x[:-1:-1]应该等价于x[::-1],但是

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

同时

>>> x[:-(len(x)+1):-1]
array([4, 3, 2, 1, 0])

所以k 时j的默认值应该是-(n+1)。而根据this post on stackoverflow,我相信当k 是Nonej的“官方”默认值。

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

【问题讨论】:

  • 我认为可能有一段时间,负索引从数组末尾算起;您正在查看的文档行可能是从那个时候开始的。
  • 这很有意义。谢谢!顺便说一句,感谢您重新格式化我的原始帖子。我绝对应该了解更多关于 stackoverflow 格式的信息
  • 对于普通的 Python 切片,它默认为 None,但我不知道 numpy。

标签: python numpy slice


【解决方案1】:

在第一级处理中,Python 解释器将:: 表示法转换为slice 对象。由 numpy.__getitem__ 方法来解释这 3 个数字。

[::-1]slice(None,None,-1) 相同。

如您所述,x[slice(None,None,-1)]x[slice(None,-1,-1)] 不同。

我怀疑-1 在:

If j is not given it defaults to n for k > 0 and -1 for k < 0 .

并不意味着以这种方式被采用。相反,它具有通常的含义 -1,the number before 0

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

j被解释为iterate upto, but not including, this value,迭代方向由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

In [291]: np.arange(10)[slice(5,-11,-1)]
Out[291]: array([5, 4, 3, 2, 1, 0])

所以-1 表示before 0-1 表示count from n 之间存在区别。文档可能对此很清楚,但这并没有错(如果您使用正确的-1)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 2018-07-12
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    相关资源
    最近更新 更多