之前numpy 数组创建的文章中我们介绍了数组的创建入门,本篇我们旨在简单介绍数组的基本操作–定向定点的取值,ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
ndarray 数组可以基于 0 – n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
基本索引
# 一维数组切片 a = np.arange(10) s = slice(2, 7, 2) # 从索引 2 开始到索引 7 停止,间隔为2 print("a = ", a) print("s = slice(2, 7, 2) # 从索引 2 开始到索引 7 停止,间隔为2") print("a[s] = ", a[s]) print("a[2:7:2] = ", a[2:7:2]) print("a[2:7] = ", a[2:7]) print("a[2:] = ", a[2:] ) print("a[2] = ", a[2])
a = [0 1 2 3 4 5 6 7 8 9] s = slice(2, 7, 2) # 从索引 2 开始到索引 7 停止,间隔为2 a[s] = [2 4 6] a[2:7:2] = [2 4 6] a[2:7] = [2 3 4 5 6] a[2:] = [2 3 4 5 6 7 8 9] a[2] = 2
# 多维数组 a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]]) print("a = ", a) print("a[::-1] = ", a[::-1]) print("a[:, ::-1] = ", a[:, ::-1]) print("a[...,1] = ", a[..., 1]) print("a[1,...] = ", a[1, ...]) print("a[...,1:] = ", a[..., 1:])
a = [[1 2 3] [3 4 5] [4 5 6]] a[::-1] = [[4 5 6] [3 4 5] [1 2 3]] a[:, ::-1] = [[3 2 1] [5 4 3] [6 5 4]] a[...,1] = [2 4 5] a[1,...] = [3 4 5] a[...,1:] = [[2 3]
花里胡哨索引
# 数组索引 print("a[[0, 1, 2], [0, 1, 0]] =", a[[0, 1, 2], [0, 1, 0]]) x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]) print('我们的数组是x:', x) rows = np.array([[0, 0], [3, 3]]) cols = np.array([[0, 2], [0, 2]]) print("x[rows, cols] = ", x[rows, cols]) # 布尔索引 print("x[x > 3] = ", x[x> 3])
a[[0, 1, 2], [0, 1, 0]] = [1 4 4] 我们的数组是x: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] x[rows, cols] = [[ 0 2] [ 9 11]] x[x > 3] = [ 4 5 6 7 8 9 10 11]