python - 在 numpy 中以相反的顺序索引索引 0

标签 python python-2.7 numpy

我创建了一个矩阵 a,并尝试以相反的顺序对其进行索引。这些是我的输出:

>>> a

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23],
       [24, 25, 26, 27],
       [28, 29, 30, 31],
       [32, 33, 34, 35],
       [36, 37, 38, 39],
       [40, 41, 42, 43],
       [44, 45, 46, 47]])

>>> print a[2:0:-1]
[[ 8  9 10 11]
 [ 4  5  6  7]]

如您所见,我没有得到第一行。现在,当我尝试这个时,我得到一个空箭头输出,因为它将它视为 2 .. n - 1。

>>> print a[2:-1:-1]
[]

我想知道有没有办法在 numpy 中使用索引符号实现反向迭代,包括第 0 个索引?

我想在一般意义上这样做,这样当我像这样迭代一些数组时,我可以利用它:

>>> b = []
>>> for i in range(a.shape[0] - 3):
...     b.append(np.hstack(a[i+3:i:-1]))

显示问题的额外说明:

现在,如果我将其修改为:

>>> b = []
>>> for i in range(a.shape[0] - 3):
...     b.append(np.hstack(a[i+2:i-1:-1]))

上面只会输出一个错误。因为,在第一次迭代中它将是一个空数组 a[2:-1:-1]。

第一种形式只会生成错误的输出,因为它将被解释为 [3,0),而第二种形式将被解释为 [2,n-1),这是完全错误的。

我使用的是 python 2.7,但它可能也与 python 3 相关。

最佳答案

请注意,切片从不包含停止索引 [start, stop) 处的项目,因此第零项从您的切片中排除。

要一直切片到开头,请不要指定停止索引(索引作为 None 传递):

>>> a[2::-1]
array([[ 8,  9, 10, 11],
       [ 4,  5,  6,  7],
       [ 0,  1,  2,  3]])

stop 指定为 -1 会返回一个空切片,因为 -1 表示最后一项;不能(在有用的意义上)从索引 2 到最后一项 大步 向后。

对于您的用例,您可以在切片中使用表达式,例如短路:

...
a[2:(i or None):-1] # 0 is falsy, so at i=0, we have None

或者使用三元条件来明确指定您希望如何处理边缘情况:

...
a[2:(None if i==0 else i):-1]

关于python - 在 numpy 中以相反的顺序索引索引 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44765008/

相关文章:

Python,按任意键退出

python-3.x - 保存 'float' numpy 图像

python - 如何在不将文件保存到磁盘的情况下从 request.FILES 打开和读取文件

python - 像素和几何形状 - Python/PIL

python - 去除空格/制表符/换行符 - python

Python - 使用 Pandas 消除大括号和输出 float

python - 减去两个包含 datetime.time 的 numpy 数组

python - 在Python中禁止执行compute_resilience函数

python - 将列表列表转换为数据框

python - 获取 Numpy MaskedArray 的最小值和最大值会引发 AttributeError