介绍通过如何通过以下三种方法提取数组元素:
基本的索引和切片比较简单,与python list的索引方式类似。
import numpy as np
print(np.__version__)
1.21.5
a = np.array([0, 1, 2, 3])
第1个元素
a[1]
1
前3个元素
a[:3]
array([0, 1, 2])
后2个元素
a[-2:]
array([2, 3])
b = np.array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
第1行
b[1]
array([4, 5, 6, 7])
第2列
b[:, 2]
array([ 2, 6, 10])
第1行第2列
b[1, 2]
6
第1到第3行
b[1:3]
array([[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
第0到第2列
b[:, :2]
array([[0, 1],
[4, 5],
[8, 9]])
第1到第3行,且也是第0到第2列
b[1:3, :2]
array([[4, 5],
[8, 9]])
最后1行
b[:, -1]
array([ 3, 7, 11])
花式索引的特点是可以提取不连续的元素
a = np.arange(4)
a
array([0, 1, 2, 3])
提取a的第1和第3个元素
a[[1, 3]]
array([1, 3])
b = np.arange(12).reshape(3, 4)
b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
提取b的第0和第2行
b[[0, 2]]
array([[ 0, 1, 2, 3],
[ 8, 9, 10, 11]])
提取b的第1和第3列
b[:, [1, 3]]
array([[ 1, 3],
[ 5, 7],
[ 9, 11]])
提取b在第0行第1列和第2行第3列的两个元素
相当于同时提取b[0, 1]
和b[2, 3]
b[[0, 2], [1, 3]]
array([ 1, 11])
通过提供一个布尔数组来提取元素,通常会结合>
、<
、==
等运算符计算出布尔数组然后根据布尔数组提取元素
a = np.arange(4)
a
array([0, 1, 2, 3])
用布尔索引提取数组a的第1和第3个元素
a[[True, False, False, True]]
array([0, 3])
提取数组a大于等于2的数
# 计算出布尔数组
a >= 2
array([False, False, True, True])
# 根据布尔数组提取数
a[a>=2]
array([2, 3])
用布尔索引提取数组b的第0和第2行
b[[True, False, True]]
array([[ 0, 1, 2, 3],
[ 8, 9, 10, 11]])