15

Numpy 暂定教程建议这a[ : :-1]是一个颠倒的a. 有人可以解释一下我们是如何到达那里的吗?

我理解这意味着(轴= 0)a[:]的每个元素。a根据我的理解,下一步:应该表示要跳过(或句号)的元素数量。

4

4 回答 4

19

它不是 numpy,它是 Python。

在 Python 中,有用于序列/可迭代的切片,其语法如下

seq[start:stop:step] => a slice from start to stop, stepping step each time.

所有参数都是可选的,但:必须有 a 才能让 Python 将其识别为切片。

step 的负值也可以以相反的顺序复制相同的序列/可迭代:

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

numpy 像任何优秀的 3rd 方库一样遵循“规则”..

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

看到这个链接

于 2013-04-01T17:26:25.640 回答
10

正如其他人所指出的,这是一种 python 切片技术,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])

第 5 行给出了一个空数组,因为它试图从第0th 个元素向后退到第 th 个元素5
切片不包括“端点”(命名为最后一个元素),因此0向后移动时第 6 行会丢失。

于 2013-04-01T17:16:04.340 回答
5

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

于 2013-04-01T17:17:47.143 回答
0

您可以使用反向Python 内置:

import numpy as np

bins = np.arange(0.0, 1.1, .1)
for i in reversed(bins):
    print(i)
于 2018-08-07T14:12:46.990 回答