#%%
import numpy as np
a = np.arange(10) # 0~10, 不含10
a
#%%
s = slice(2, 8, 2) # 构造切片对象
print(s, type(s)) # slice(2, 7, 2) <class 'slice'>
a[s] # 从索引2开始 索引8结束(不含8) 步长2
#%%
# 可以通过冒号分隔切片参数 start:stop:step 来进行切片操作
a[2:8:2] # 从索引2开始 索引8结束(不含8) 步长2
#%%
a[5] # 只获取一个元素, 元素索引为5
#%%
a[5:] # 获取多个元素, 从索引5开始到最后
#%%
a[2:5] # 获取多个元素, 从索引2开始到索引5(不含5)
#%%
# 多维数组
import numpy as np
a = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
a
#%%
# 从某个索引处开始切割
a[1:] # 从行索引1开始到最后, 获取所有列
#%%
# 切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray
a[...,1] # 所有行的第二列(列索引1)
#%%
a[1,...] # 与 a[1:] 不同, 这里只获取行索引1的所有列, 返回时会先r后c处理
#%%
a[...,1:] # 还可以行切+列切 所有行的索引1(第二列)到最后一列 (3r2c)
#%%