1.3. 切片与索引#
索引(Index)从 ndarray
里定位所需要的数据,切片(Slice)从 ndarray
里选择一些数据。切片和索引都是在 ndarray
上选择所需要的数据。
无论是索引还是切片,都需要一个 Index 标号来定位从左往右或者从右往左第几个数据是我们想要的数据。从左往右时起始位置从 0 开始,即 Index = 0 是整个 ndarray
最左侧元素;从右往左索引时起始位置从 - 1 开始,即 Index = -1 表示最右侧元素。
Show 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。没有写 start
和 stop
,表示使用该维度原有的 start
和 stop
。
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]]])