这两天看到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]]

———————————————— 上一页 1 2 下一页

关键词: