在本教程中,我们将一起探讨 NumPy 中的基础切片和高级索引。NumPy 数组针对索引和切片操作进行了深度优化,这使得它成为数据分析项目中的一个绝佳选择。
索引 NumPy 数组
索引主要用于从一维数组中提取单个元素。当然,我们也可以利用它从多维 NumPy 数组 中提取特定的行、列或平面。
下表展示了正向索引和负向索引的区别:正向索引从 0 开始(从左向右),而负向索引从 -1 开始(从右向左)。
-5
-3
-1
—
—
—
23
55
23
0
2
4### 使用索引数组进行索引
利用索引数组,我们可以通过元素的位置索引一次性从 NumPy 数组中获取多个元素。这与普通的切片不同,它会返回数据的一个新副本。
示例: 在这里,我们创建一个递减顺序的数组,并使用另一个索引数组来提取特定的元素。
Python
CODEBLOCK_f2620361
Output
(‘Array:‘, array([10, 8, 6, 4, 2]))
(‘Elements at specified indices:‘, array([4, 8, 6]))
解释: arr[[3, 1, 2]] 通过从原数组的索引 3、1 和 2 处选取元素,创建了一个新数组,最终结果为 [4, 8, 6]。
NumPy 数组中的索引类型
1. 基础切片与索引
基础切片和索引用于访问 NumPy 数组中的特定元素或某个范围内的元素。它返回的是原始数组的一个视图,而不是副本。其通用语法是 x[start:stop:step],其中:
- start: 起始索引(包含)
- stop: 结束索引(不包含)
- step: 元素之间的间隔
示例: 在这里,我们使用不同的切片模式来访问数组元素。
Python
CODEBLOCK_727f5b91
Output
(‘a[15] =‘, 15)
(‘a[-8:17:1] =‘, array([12, 13, 14, 15, 16]))
(‘a[10:] =‘, array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]))
使用省略号 (…): 省略号 (…) 用于表示多维数组中的所有维度,这使得访问深层元素变得更加容易。
示例: 在这里,我们使用省略号来访问所有内部列表中的第二个元素。
Python
CODEBLOCK_2bed03b3
Output
[[ 2 5]
[ 8 11]]
解释: b[…, 1] 访问了所有维度中每个内部列表的第二个元素(索引 1)。
2. 高级索引
NumPy 中的高级索引允许我们使用整数数组或布尔值数组来提取复杂的数据模式。与基础切片不同,它返回的是数据的副本,而不是视图。当索引对象是以下情况时,会触发高级索引:
- 整数或布尔类型的 ndarray
- 包含至少一个序列对象的元组
- 非元组类型的序列对象
NumPy 数组索引中的高级索引主要有两种类型:
- 纯整数索引
- 布尔整数索引
整数数组索引: 这种方法使用整数数组来选择元素。来自不同维度的每一对索引都标识了一个特定的元素。
示例: 在这里,我们使用基于整数的位置来提取元素。
Python
CODEBLOCK_a09e204a
Output
[1 3 6]
解释: 这里,我们从数组中选择了位置 (0,0)、(1,0) 和 (2,1),返回的元素分别是 1、3 和 6。
布尔索引: 这种索引方式使用布尔表达式作为索引。只有满足该布尔表达式的元素才会被返回。它通常用于过滤出所需的元素值。
示例 1: 在这里,我们选择大于 50 的数字。
Python
CODEBLOCK_2eb38930
Output
[ 80 100]
示例 2: 在这里,我们选择行之和为 10 的倍数的行。
Python
CODEBLOCK_16911ff1
Output
[[ 5 5]
[16 4]]