如果你觉得内容对你有帮助,请在 GitHub 上点个 star 吧!

切片与索引

1.3. 切片与索引#

索引(Index)从 ndarray 里定位所需要的数据,切片(Slice)从 ndarray 里选择一些数据。切片和索引都是在 ndarray 上选择所需要的数据。

无论是索引还是切片,都需要一个 Index 标号来定位从左往右或者从右往左第几个数据是我们想要的数据。从左往右时起始位置从 0 开始,即 Index = 0 是整个 ndarray 最左侧元素;从右往左索引时起始位置从 - 1 开始,即 Index = -1 表示最右侧元素。

Hide code cell content
import numpy as np

一维数组#

# 生成一维数组
a = np.array([2,0,2,3,9,2,3,4])

索引#

假如我们想查找数组 a 中 Index 为 4 的元素,即查找第 5 个元素。刚才提到,Index 标号从 0 开始,所以 Index = 4 意味着第 5 个元素。

a[4]
9

切片#

对数组 a 切片的语法为 :a[start:end:step],其中 start 为起始 Index,end 为结束 Index,step 为步长。切片后,我们就得到了从 start 开始,到 end 结束的子串。注意,不包括 end

a[0:6:2]
array([2, 2, 9])

多维数组#

b = np.arange(36).reshape((3,4,3))
b
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]],

       [[12, 13, 14],
        [15, 16, 17],
        [18, 19, 20],
        [21, 22, 23]],

       [[24, 25, 26],
        [27, 28, 29],
        [30, 31, 32],
        [33, 34, 35]]])

索引#

多维数组要对每个维度分别进行索引,不同维度之间用逗号 , 隔开。

b[0,3,2]
11
b[1,2,1]
19
b[-2,-2,-2]
19

切片#

如果想切出第 0 维所有内容,可以使用冒号 :,表示该维度所有内容均保留。

b[:,2,-3]
array([ 6, 18, 30])

每个维度切片方法与一维数组相同,不同维度之间用逗号 , 隔开。比如下面的例子,也可以使用 start:stop:step 的方式。

b[:,1:4:2,:]
array([[[ 3,  4,  5],
        [ 9, 10, 11]],

       [[15, 16, 17],
        [21, 22, 23]],

       [[27, 28, 29],
        [33, 34, 35]]])

保留了前两个维度,::2 最后一个维度步长为2。没有写 startstop,表示使用该维度原有的 startstop

b[:,:,::2]
array([[[ 0,  2],
        [ 3,  5],
        [ 6,  8],
        [ 9, 11]],

       [[12, 14],
        [15, 17],
        [18, 20],
        [21, 23]],

       [[24, 26],
        [27, 29],
        [30, 32],
        [33, 35]]])