更新时间:2022-09-05 来源:黑马程序员 浏览量:
ndarray对象的元素可以通过索引和切片来访问和修改,就像Python内置的容器对象一样。下面是一个一维数组,从表面上来看,该数组使用索引和切片的方式与Python列表的功能相差不大,具体代码如下。
In [53]: import numpy as np In [54]: arr=np.arange(8) # 创建一个一维数组 In [55]: arr Out[55]: array([0, 1, 2, 3, 4, 5, 6, 7]) In [56]: arr[5] # 获取索引为5的元素 Out[56]: 5 In [57]: arr[3:5] # 获取索引为3~5的元素,但不包括5 In [58]: arr[1:6:2] # 获取索引为1~6的元素,步长为2 Out[58]: array([1, 3, 5])
不过,对于多维数组来说,索引和切片的使用方式与列表就不大一样了。在二维数组中,每个索引位置上的元素不再是一个标量了,而是一个一维数组,具体示例代码如下。
In [59]: import numpy as np In [60]: arr2d=np.array([1, 2, 3],[4,5,6],[7,8,9]) # 创建二维数组 In [61]: arr2d Out[61]: array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) In [62]: arr2d[1] # 获取索引为1的元素 Out[62]: array([4, 5, 6])
此时,如果我们想通过索引的方式来获取二维数组的单个元素,就需要通过形如“arr[x,y]”,以逗号分隔的索引来实现。其中,x表示行号,y表示列号。示例代码如下。
In [63]: arr2d[0, 1] # 获取位于第0行第1列的元素 Out[63]: 2
接下来,通过一张图来描述数组arr2d的索引方式,如图2-3所示。从图2-3中可以看出,arr2d是一个3行3列的数组,如果我们想获取数组的单个元素,必须同时指定这个元素的行索引和列索引。例如,获取索引位置为第1行第1列的元素,我们可以通过arr2d[1,1]来实现。
相比一维数组,多维数组的切片方式花样更多,多维数组的切片是沿着行与列的方向选取元素的,我们可以传入一个切片,也可以传入多个切片,还可以将切片与整数索引混合使用。
图2-3 arr2d的索引方式
传入一个切片的示例代码:
In [64]: arr2d[:2] Out[64]: array([[1, 2, 3], [4, 5, 6]])
传入两个切片的示例代码:
In [65]: arr2d[0:2, 0:2] Out[65]: array([[1, 2], [4, 5]])
切片与整数索引混合使用的示例代码:
In [66]: arr2d[1, :2] Out[66]: array([4, 5])
上述多维数组切片操作的相关示意图,如图2-4所示。
图2-4 多维数组切片图示