Numpy初学者教程建议使用a[ : :-1]
来表示一个反转的a
。有人能解释一下这是怎么得到的吗?
我理解a[:]
意味着对于a
的每个元素(在轴axis=0上)。接下来的:
应该表示从我的理解中跳过(或周期)的元素数量。
Numpy初学者教程建议使用a[ : :-1]
来表示一个反转的a
。有人能解释一下这是怎么得到的吗?
我理解a[:]
意味着对于a
的每个元素(在轴axis=0上)。接下来的:
应该表示从我的理解中跳过(或周期)的元素数量。
这不是numpy,而是Python。
在Python中,有用于序列/可迭代对象的切片,其语法如下
seq[start:stop:step] => a slice from start to stop, stepping step each time.
所有参数都是可选的,但必须有一个:
,才能让Python将其识别为切片。
对于步长(step)来说,负值也可以用于以相反的顺序复制相同的序列/可迭代对象:
>>> 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])
请参阅此链接
正如其他人所指出的那样,这是一种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])
由于从第0个元素向第5个元素倒退,因此第5行给出了一个空数组。
切片不包括“结束点”(最后一个元素),因此在向后移动时,第6行漏掉了0
。
a[5:-1:-1]
返回 array([], dtype=int64)
而不是正确的答案 array([4, 3, 2, 1, 0])
? - anaika[-1]
表示最后一个元素。因此,a[5:-1:-1]
等同于 a[5:4:-1]
,所以空列表是正确的答案。要访问列表末尾(无论向哪个方向),可以使用 None
或留空:a[5:None:-1]
或 a[5::-1]
。 - askewchan这不仅适用于numpy,切片a[::-1]
等同于slice(None, None, -1)
,其中第一个参数是起始索引,第二个参数是结束索引,第三个参数是步长。如果起点或终点为None
,则与使用序列的开头或结尾具有相同的行为,并且步长-1
将以相反的顺序迭代序列。
你可以使用reversed Python内置函数:
import numpy as np
bins = np.arange(0.0, 1.1, .1)
for i in reversed(bins):
print(i)