numpy中的反转数组?

时间:2013-04-01 17:12:49

标签: python arrays numpy

Numpy tentative tutorial表明a[ : :-1]是反向a。有人可以解释我们是如何到达那里的吗?

我理解a[:]表示a的每个元素(轴= 0)。下一个:应该表示从我的理解中跳过(或句点)的元素数量。

4 个答案:

答案 0 :(得分:15)

它不是numpy,它是Python。

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

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

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

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

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

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

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

请参阅this link

答案 1 :(得分: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])

第5行给出一个空数组,因为它试图从0元素向后退一步到5。 切片不包含'端点'(命名为最后一个元素),因此第6行在向后时会错过0

答案 2 :(得分:4)

这不是numpy特有的,切片a[::-1]相当于slice(None, None, -1),其中第一个参数是起始索引,第二个参数是结束索引,第三个参数是步。 None用于启动或停止将与使用序列的开头或结尾具有相同的行为,而-1 for step将以相反的顺序迭代序列。

答案 3 :(得分:0)

您可以使用reversed内置Python:

import numpy as np

bins = np.arange(0.0, 1.1, .1)
for i in reversed(bins):
    print(i)