numpy中的反转数组?

Den*_* S. 10 python arrays numpy

Numpy试探性教程表明这a[ : :-1]是相反的a.有人可以解释我们是如何到达那里的吗?

我理解这a[:]意味着每个元素a(轴= 0).接下来:应该表示从我的理解中跳过(或句点)的元素数量.

pra*_*nsg 15

它不是numpy,它是Python.

在Python中,有序列/可迭代的切片,它们有以下语法

seq[start:stop:step] => a slice from start to stop, stepping step each time.
Run Code Online (Sandbox Code Playgroud)

所有参数都是可选的,但是:Python必须将其识别为切片.

对于步骤,负值也可以以相反的顺序制作相同序列/可迭代的副本:

>>> L = range(10)
>>> L[::-1] 
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)

和numpy一样遵循"规则",就像任何好的第三方图书馆一样.

>>> a = numpy.array(range(10))
>>> a[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
Run Code Online (Sandbox Code Playgroud)

看到这个链接


ask*_*han 8

正如其他人所指出的那样,这是一种蟒蛇切片技术,而numpy恰好也是如此.希望这有助于解释它是如何工作的:

最后一点是步长.所述1指示在一个时间到步骤由一个元件,所述-确实,在反向.

空白表示第一个和最后一个,除非你有一个负步长,在这种情况下,它们表示最后和第一个:

In [1]: import numpy as np

In [2]: a = np.arange(5)

In [3]: a
Out[3]: array([0, 1, 2, 3, 4])

In [4]: a[0:5:1]
Out[4]: array([0, 1, 2, 3, 4])

In [5]: a[0:5:-1]
Out[5]: array([], dtype=int64)

In [6]: a[5:0:-1]
Out[6]: array([4, 3, 2, 1])

In [7]: a[::-2]
Out[7]: array([4, 2, 0])
Run Code Online (Sandbox Code Playgroud)

第5行给出一个空数组,因为它试图从第0th个元素向后退一步5.
切片不包括'端点'(命名为最后一个元素),因此第6行在0向后时未命中.

  • @AbhishekNaik 在python索引中,[负数从末尾开始向](https://docs.python.org/3/tutorial/introduction.html#lists)开头,所以`a[-1]`是最后一个元素。因此,`a[5:-1:-1]` 等价于 `a[5:4:-1]`,所以空数组*是*正确的答案。要到达终点(在任一方向),请使用 `None` 或将其留空:`a[5:None:-1]` 或 `a[5::-1]`。 (4认同)

And*_*ark 5

这不是特定于numpy的,slice a[::-1]等效于slice(None, None, -1),其中第一个参数是开始索引,第二个参数是结束索引,第三个参数是步骤。 Nonefor start或stop将具有与使用序列的开头或结尾相同的行为,而-1step则以相反的顺序遍历该序列。