这两天看到numpy数组的切片操作,记录一下,方便以后查看
1. 常规操作
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
a = np.arange(10)
print(a) # 输出 [0 1 2 3 4 5 6 7 8 9]
s = slice(2, 10, 2) # 创建一个切片对象,从索引2开始,终止于索引10(不包含10) ,步长 2
print(a[s]) #输出 [2 4 6 8]
s2 = a[1:10:2]
print(s2) #输出 [1 3 5 7 9]
print(a[1]) #输出 1
print(a[2:]) #输出从下标为2开始,到最后
print(a[:5:2]) #输出从下标0开始到下标5(不包含下标5),步长为2
2. 二维和多维数组的切片
# 多维数组
# 二维数组
a2 = np.arange(12).reshape(4, 3)
print(a2)
print(a2[:, 2]) # 取下标为2的整列数据
# # 对于超过3维的数组,可以用 '...' 来简化操作
a = np.arange(24).reshape(2, 3, 4)
print(a)
print(a[1 , ...]) # 等价于 print(a[1, :, :])
print(a[... , 1]) # 等价于 print(a[ :, :, 1])
3.索引
# 索引
arr = np.array([[1,2,3,4],
[2,3,4,5],
[3,4,5,6],
[4,5,6,7]])
# print(arr[[0,2],]) #输出 arr 的第0行和第一行
'''
[[1 2 3 4]
[3 4 5 6]]
'''
# print(arr[..., [2,3]]) # 输出 arr 的第2列和第三列
'''
[[3 4]
[4 5]
[5 6]
[6 7]]
'''
print(arr[..., [3, 2]]) #注意顺序
'''
[[4 3]
[5 4]
[6 5]
[7 6]]
'''
# print(arr[[0, 2], [2, 3]]) #输出 第下标为0的行的第下标为2的列, 和 第下标为2的行的第下标为3的列
'''
[3 6]
'''
# boolean/mask index
mask = arr > 5 # arr 数组中值大于5
print(mask)
'''
[[False False False False]
[False False False False]
[False False False True]
[False False True True]]
'''