4.1 基本索引与切片


文档摘要

4.1 基本索引与切片 NumPy 数组的基本索引与切片 NumPy 的核心是 对象,它是一个多维数组,可以存储相同类型的数据。访问和操作 中的元素是数据分析和科学计算的关键步骤。NumPy 提供了强大的索引和切片功能,使得我们可以方便地访问数组的特定部分。本节将深入探讨 NumPy 数组的基本索引和切片。 4.1 基本索引 基本索引是指使用整数来访问数组中的单个元素。对于一维数组,索引方式与 Python 列表类似;对于多维数组,我们需要为每个维度提供一个索引。 4.1.1 一维数组的索引 一维数组的索引从 0 开始,最后一个元素的索引是 ,其中 是数组的长度。 代码示例: 详解: 访问数组 的第一个元素,索引为 0。 访问数组 的最后一个元素。

4.1 基本索引与切片

NumPy 数组的基本索引与切片

NumPy 的核心是 ndarray 对象,它是一个多维数组,可以存储相同类型的数据。访问和操作 ndarray 中的元素是数据分析和科学计算的关键步骤。NumPy 提供了强大的索引和切片功能,使得我们可以方便地访问数组的特定部分。本节将深入探讨 NumPy 数组的基本索引和切片。

4.1 基本索引

基本索引是指使用整数来访问数组中的单个元素。对于一维数组,索引方式与 Python 列表类似;对于多维数组,我们需要为每个维度提供一个索引。

4.1.1 一维数组的索引

一维数组的索引从 0 开始,最后一个元素的索引是 n-1,其中 n 是数组的长度。

代码示例:

import numpy as np arr = np.array([10, 20, 30, 40, 50]) # 访问第一个元素 print(arr[0]) # 输出: 10 # 访问最后一个元素 print(arr[-1]) # 输出: 50 # 修改元素的值 arr[2] = 35 print(arr) # 输出: [10 20 35 40 50]

详解:

  • arr[0] 访问数组 arr 的第一个元素,索引为 0。

  • arr[-1] 访问数组 arr 的最后一个元素。负数索引表示从数组末尾开始计数,-1 代表最后一个元素,-2 代表倒数第二个元素,以此类推。

  • arr[2] = 35 修改数组 arr 中索引为 2 的元素的值为 35。

4.1.2 多维数组的索引

对于多维数组,我们需要为每个维度提供一个索引。例如,对于一个二维数组(矩阵),我们需要提供行索引和列索引。

代码示例:

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 访问第一行第一列的元素 print(arr[0, 0]) # 输出: 1 # 访问第二行第三列的元素 print(arr[1, 2]) # 输出: 6 # 修改第二行第二列的元素 arr[1, 1] = 55 print(arr) # 输出: # [[ 1 2 3] # [ 4 55 6] # [ 7 8 9]]

详解:

  • arr[0, 0] 访问数组 arr 的第一行(索引为 0)和第一列(索引为 0)的元素。

  • arr[1, 2] 访问数组 arr 的第二行(索引为 1)和第三列(索引为 2)的元素。

  • arr[1, 1] = 55 修改数组 arr 中第二行第二列的元素的值为 55。

图示:

4.2 基本切片

切片是指从数组中提取一个子数组。切片使用 start:stop:step 语法,其中 start 是起始索引(包含),stop 是结束索引(不包含),step 是步长。如果省略 start,则默认为 0;如果省略 stop,则默认为数组的长度;如果省略 step,则默认为 1。

4.2.1 一维数组的切片

代码示例:

import numpy as np arr = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90]) # 提取从索引 2 到索引 5(不包含)的元素 print(arr[2:5]) # 输出: [30 40 50] # 提取从索引 2 到末尾的元素 print(arr[2:]) # 输出: [30 40 50 60 70 80 90] # 提取从开始到索引 5(不包含)的元素 print(arr[:5]) # 输出: [10 20 30 40 50] # 提取所有元素 print(arr[:]) # 输出: [10 20 30 40 50 60 70 80 90] # 提取每隔一个元素的元素 print(arr[::2]) # 输出: [10 30 50 70 90] # 反转数组 print(arr[::-1]) # 输出: [90 80 70 60 50 40 30 20 10]

详解:

  • arr[2:5] 提取索引 2、3 和 4 的元素。

  • arr[2:] 提取从索引 2 到数组末尾的所有元素。

  • arr[:5] 提取从数组开始到索引 5(不包含)的所有元素。

  • arr[:] 提取数组的所有元素,相当于复制数组。

  • arr[::2] 提取数组中每隔一个元素的元素,从索引 0 开始。

  • arr[::-1] 反转数组的顺序。

4.2.2 多维数组的切片

对于多维数组,我们可以为每个维度指定切片。

代码示例:

import numpy as np arr = np.array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) # 提取前两行和前两列的元素 print(arr[:2, :2]) # 输出: # [[1 2] # [5 6]] # 提取第二行和所有列的元素 print(arr[1, :]) # 输出: [5 6 7 8] # 提取所有行和第二列的元素 print(arr[:, 1]) # 输出: [ 2 6 10] # 提取第二行和第三列的元素 print(arr[1:2, 2:3]) # 输出: [[7]]

详解:

  • arr[:2, :2] 提取前两行(索引 0 和 1)和前两列(索引 0 和 1)的元素。

  • arr[1, :] 提取第二行(索引 1)的所有列的元素。

  • arr[:, 1] 提取所有行的第二列(索引 1)的元素。

  • arr[1:2, 2:3] 提取第二行(索引 1)和第三列(索引 2)的元素,结果是一个 1x1 的数组。

图示:

4.2.3 切片是视图

NumPy 的切片操作返回的是原始数组的视图,而不是副本。这意味着,如果修改切片中的元素,原始数组也会受到影响。

代码示例:

import numpy as np arr = np.array([10, 20, 30, 40, 50]) slice_arr = arr[1:4] print(slice_arr) # 输出: [20 30 40] # 修改切片中的元素 slice_arr[0] = 25 print(slice_arr) # 输出: [25 30 40] print(arr) # 输出: [10 25 30 40 50] 原始数组也被修改了

详解:

当我们将 arr[1:4] 赋值给 slice_arr 时,slice_arr 并不是 arr 的一个副本,而是 arr 的一个视图。因此,当我们修改 slice_arr 中的元素时,arr 中对应的元素也会被修改。 如果需要创建副本,可以使用 .copy() 方法。

创建副本:

import numpy as np arr = np.array([10, 20, 30, 40, 50]) slice_arr = arr[1:4].copy() slice_arr[0] = 25 print(slice_arr) # 输出: [25 30 40] print(arr) # 输出: [10 20 30 40 50] 原始数组未被修改

4.3 总结

NumPy 的基本索引和切片功能为我们提供了灵活的方式来访问和操作数组中的元素。理解索引和切片的语法以及视图的概念对于有效地使用 NumPy 至关重要。通过熟练掌握这些基本操作,可以更轻松地进行数据分析和科学计算。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U