数组索引、切片和迭代

和Jython的list类似,NDArray一维数组也有索引、切片和迭代功能。索引是从0开始的,a[2]指数组的从一开始数的第三个元素。 切片需要冒号,第一个冒号左边是起始索引,右边是结束索引,如果有两个冒号则第二个冒号后是步长。起始索引缺省为0,结束索引 缺省为维的长度,步长缺省为1。需要注意的是数组切片时起始索引的元素会被包含,而结束索引的元素不会被包含,a[2:5]指取出 数组索引为2到索引为4的切片,生成一个新的包含三个元素的一维数组。索引为负数时相当于维长度加上该负数,步长为负数时表示 数组沿该维从后往前切片,a[::-1]就是一维数组的反序。

>>> a = arange(10)**3
>>> a
array([0, 1, 8, 27, 64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([8, 27, 64])
>>> a[:6:2] = 1000
>>> a
array([1000, 1, 1000, 27, 1000, 125, 216, 343, 512, 729])
>>> a[::-1]
array([729, 512, 343, 216, 125, 1000, 27, 1000, 1, 1000])
>>> for i in a:
...     print(i**(1/3.))
...
10.0
1.0
10.0
3.0
10.0
5.0
6.0
7.0
8.0
9.0

多维数组可以沿每个维进行索引和切片,中间以逗号为分割。当提供的索引少于维的数量时,缺失的索引被认为是完整的切片。

>>> b = array([[0,1,2,3],[10,11,12,13],[20,21,22,23],[30,31,32,33],[40,41,42,43]])
>>> b[2,3]
23
>>> b[0:5,1]
array([1, 11, 21, 31, 41])
>>> b[:,1]
array([1, 11, 21, 31, 41])
>>> b[1:3,:]
array([[10, 11, 12, 13]
      [20, 21, 22, 23]])
>>> b[1:3]
array([[10, 11, 12, 13]
      [20, 21, 22, 23]])