.. _dos-meteoinfolab-milab_cn-numeric-array_slice: *************************** 数组索引、切片和迭代 *************************** 和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]])