numpy 数组的切片操作

这两天看到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]]
'''
发布了80 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qiukapi/article/details/104479025