dev*_*nut 3 python numpy python-2.7
我创建了一个矩阵 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]]
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我没有得到第一排。现在,当我尝试此操作时,我得到一个空箭头输出,因为它将其视为 2 .. n - 1。
>>> print a[2:-1:-1]
[]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法使用 numpy 中的索引表示法来实现包括第 0 个索引的反向迭代?
我想在一般意义上这样做,这样当我像这样迭代一些数组时,我可以利用这个:
>>> b = []
>>> for i in range(a.shape[0] - 3):
... b.append(np.hstack(a[i+3:i:-1]))
Run Code Online (Sandbox Code Playgroud)
显示问题的额外说明:
现在,如果我将其修改为:
>>> b = []
>>> for i in range(a.shape[0] - 3):
... b.append(np.hstack(a[i+2:i-1:-1]))
Run Code Online (Sandbox Code Playgroud)
上面只会输出一个错误。因为,在第一次迭代中它将是一个空数组[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]])
Run Code Online (Sandbox Code Playgroud)
指定stop as-1返回一个空切片,因为-1意味着最后一项;我们不能(在有用的意义上)从索引 2 向后大步走到最后一项。
对于您的用例,您可以使用切片中的表达式,例如短路:
...
a[2:(i or None):-1] # 0 is falsy, so at i=0, we have None
Run Code Online (Sandbox Code Playgroud)
或者使用三元条件来明确指定您希望如何处理边缘情况:
...
a[2:(None if i==0 else i):-1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2693 次 |
| 最近记录: |