Python自学笔记11 Numpy的索引和切片
一维数组索引、切片
索引
按照索引来访问元素:
比如第一个元素:
a[0]
a[-11]
最后一个元素
a[-1]
a[10]
特殊索引
numpy.newaxis 是一个特殊的索引,用于增加数组的维度。
上图是将一维数组转化为行向量和列向量的示意图。
numpy.squeeze() 函数用于从数组的形状中删除长度为 1 的维度
对于一个形状为 (1, 3, 1, 5) 的四维数组,可以使用 numpy.squeeze(a) 函数将其转换为形状为 (3, 5) 的二维数组,其中长度为 1 的第 0 和第 2 维被删除。
其他升维和变形
将行数组转换为列向量
a_1D_array[:, None]
a_1D_array.reshape(-1,1)
将数组转化维行向量
a_1D_array[None, :]
a_1D_array.reshape(1,-1)
行向量与列向量相乘
a_1D_array[np.newaxis, :] @ a_1D_array[:, np.newaxis]
结果;array([[110]])
列向量与行向量相乘
a_1D_array[:, np.newaxis] @ a_1D_array[np.newaxis, :]
结果
array([[ 25, 20, 15, 10, 5, 0, -5, -10, -15, -20, -25],
[ 20, 16, 12, 8, 4, 0, -4, -8, -12, -16, -20],
[ 15, 12, 9, 6, 3, 0, -3, -6, -9, -12, -15],
[ 10, 8, 6, 4, 2, 0, -2, -4, -6, -8, -10],
[ 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],
[-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10],
[-15, -12, -9, -6, -3, 0, 3, 6, 9, 12, 15],
[-20, -16, -12, -8, -4, 0, 4, 8, 12, 16, 20],
[-25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25]])
连续升维升到三维:
a_1D_array[:, np.newaxis, np.newaxis]
切片
开始索引指定要获取的第一个元素的位置,结束索引指定要获取的最后一个元素的位置+1。
设定步长:
翻转切片:
整数索引、 切片
使用整数索引可以更加灵活的进行切片
布尔索引、切片
使用布尔值来选择我们想要的切片
视图和副本
在未使用copy函数时,默认是视图切片,即改变切片的内容会直接改变原数组;而使用了copy函数的切片会被视为新的数组。
# 创建一个一维数组
a = np.array([1, 2, 3, 4, 5])# 创建一个切片视图
s = a[1:3]# 修改视图中的数据
s[0] = 1000# 查看原始数组
print(a) # 输出:[1 1000 3 4 5]# 创建一个整数数组索引副本
c = a[[1, 3]].copy()# 修改副本中的数据
c[0] = 888# 查看原始数组
print(a) # 输出:[1 1000 3 4 5]
print(c)
二维数组索引、切片
取出单一元素
取出行
取出第 0 行,只需 a[0], 结果为一维数组。而 a[[0], :] 取出第 0 行,结果为二
维数组。