之前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]