文章目录
- 数组的索引和切片
- 普通索引
- 一维数组索引
- 二维数组索引
- 三维数组索引
- 切片
- 一维数组切片
- 二维数组
- 三维数组
- 高级索引
- 整数数组索引
- 一维数组
- 二维数组
- 三维数组
- 布尔索引
数组的索引和切片
从数组中获取元素可以使用切片和索引,ndarray中除了普通索引和切片外还增加了新的索引功能,更方便的实现从ndarray中获取元素,接下来介绍如何从不同维度的数组中获取元素。
普通索引
一维数组索引
语法:数组名[索引值]
>>> import numpy as np
>>> a = np.array([2,4,6,8,10])
array([ 2, 4, 6, 8, 10])
>>> a[0] # 索引位置为0的元素
2
二维数组索引
语法:数组名[行的索引值, 列的索引值]
示例:
>>> a = np.arange(1, 25).reshape(4,6) # 创建二维数组
>>> a
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24]])
>>> a[2,4] # 获取索引为第2行,第4列的元素
17
三维数组索引
语法:数组名[页的索引值, 行的索引值, 列的索引值]
示例:
>>> a = np.arange(1, 25).reshape(2,4,3) # 创建三维数组
>>> a
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]],
[[13, 14, 15],
[16, 17, 18],
[19, 20, 21],
[22, 23, 24]]])
>>> a[1, 2, 0] # 获取索引为第1页,第2行,第0列的元素
19
切片
一维数组切片
语法:数组名[开始值: 结束值: 步长]
- 步长默认为1
- 开始值默认为0
- 结束值为开区间
示例:
>>> a = np.array([2,4,6,8,10])
>>> a
array([ 2, 4, 6, 8, 10])
>>> a[1:3] # 切取从索引值1开始到索引值为3(不包含3)的元素
array([4, 6])
二维数组
语法:数组名[ 行的开始值: 行的结束值: 行的步长, 列的开始值: 列的结束值: 列的步长]
示例:
>>> a = np.arange(1, 25).reshape(4,6)
>>> a
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24]])
>>> a[1:4, 1:3] # 行选取索引从1开始到4结束(不包含4),列选取索引从1开始到3结束(不包含3)
array([[ 8, 9],
[14, 15],
[20, 21]])
三维数组
语法:数组名[页的开始值: 页的结束值: 页的步长, 行的开始值: 行的结束值: 行的步长, 列的开始值: 列的结束值: 列的步长]
示例:
>>> a = a = np.arange(1, 49).reshape(3,4,4)
>>> a
array([[[ 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, 36],
[37, 38, 39, 40],
[41, 42, 43, 44],
[45, 46, 47, 48]]])
>>> a[1:2,2:4,1:3] # 使用逗号间隔页,行,列
array([[[26, 27],
[30, 31]]])
通过以上示例可以看出多维数据中使用逗号间隔不同的维度。
高级索引
整数数组索引
一维数组
语法:数组名[[索引1,索引2,…]]
>>> a = np.array([2,4,6,8,10])
>>> a
array([ 2, 4, 6, 8, 10])
>>> a[[2,3]] # 同时获取多个元素,将索引值放入列表中构成整数数组索引
array([6, 8])
二维数组
语法:数组名[[行的索引值], [列的索引值]]
>>> a = np.arange(1, 25).reshape(4,6)
>>> a
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24]])
>>> a[[1,3],[2,2]] # 索引为1行、2列的元素,索引为3行、2列的元素。
array([ 9, 21])
注意:示例代码中第一个列表[1,3]为行的索引,[2, 2]为列的索引。
三维数组
语法:数组名[[页的索引值], [行的索引值], [列的索引值]]
>>> a = np.arange(1, 49).reshape(3,4,4)
>>> a
array([[[ 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, 36],
[37, 38, 39, 40],
[41, 42, 43, 44],
[45, 46, 47, 48]]])
>>> a[[0,1],[2,1],[0,3]] # 逗号间隔了页,行,列。第一个列表中为页的索引,第二个列表为行的索引,第三个为列的索引
array([ 9, 24])
布尔索引
语法:数组名[条件表达式]
示例:
>>> a = np.arange(1, 25).reshape(4,6)
>>> a
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24]])
>>> a[a>10] # 布尔索引将满足条件的筛选出来,返回一维数组
array([11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])