# 基本的索引
# 导入NumPy库并使用别名np
import numpy as np
# 创建一个包含近似圆周率值的浮点数数组
arr = np.array([3.1, 3.14, 3.141, 3.1415, 3.14159, 3.141592, 3.1415926])
# 打印数组中索引为4的元素(即第5个元素)
print(arr[4]) # 输出:3.14159
print("------------------") # 分隔线
# 打印数组中索引3到5的元素(左闭右开区间)
print(arr[3:6]) # 输出:[3.1415 3.14159 3.141592]
print("------------------") # 分隔线
# 将索引3到5的元素赋值为更高精度的圆周率近似值
arr[3:6] = 3.14159265358
# 打印修改后的数组(注意数值精度被截断)
print(arr)
输出结果
3.14159
------------------
[3.1415 3.14159 3.141592]
------------------
[3.1 3.14 3.141 3.14159265 3.14159265 3.14159265
3.1415926 ]
二、代码功能解析
1. 数组索引与访问
arr[4]:- NumPy数组索引从0开始,
arr[4]访问第5个元素(值为3.14159)。
- NumPy数组索引从0开始,
2. 切片操作
arr[3:6]:- 切片操作遵循左闭右开规则,实际选中索引3、4、5的元素,即原数组中的
[3.1415, 3.14159, 3.141592]。
- 切片操作遵循左闭右开规则,实际选中索引3、4、5的元素,即原数组中的
3. 赋值与数值精度
arr[3:6] = 3.14159265358:- 利用广播机制,将索引3到5的3个元素全部赋值为
3.14159265358。 - 精度截断:由于NumPy默认使用
float64类型存储,实际存储时会保留约15位有效数字。最终打印结果可能显示为3.1415927(系统显示位数有限)。
- 利用广播机制,将索引3到5的3个元素全部赋值为
三、关键知识点
1. 索引规则
- Python和NumPy均从0开始计数索引,
arr[4]对应第5个元素。
2. 切片范围
arr[start:end]包含索引start至end-1的元素,例如3:6对应索引3、4、5。
3. 广播机制
- 标量赋值时,NumPy自动将单个值广播到切片选中的所有位置。
4. 数据类型与精度
- 原数组在创建时自动推断为
float64类型,存储精度约为15位小数。 - 赋值的高精度值会被截断,例如
3.14159265358存储后可能显示为3.1415927(因打印时默认显示8位小数)。
四、输出示例
3.14159
------------------
[3.1415 3.14159 3.141592]
------------------
[3.1 3.14 3.141 3.1415927 3.1415927 3.1415927 3.1415926]
输出说明:
- 索引4的值为
3.14159(原数据未修改)。 - 修改后的索引3-5元素因精度限制,显示为
3.1415927(实际存储值可能更精确,但打印时被格式化)。
代码示例:
# 导入NumPy库并使用别名np
import numpy as np
# 创建一个2行4列的二维浮点数组,包含不同精度的圆周率近似值
arr = np.array([
[3.1, 3.14, 3.141, 3.1415],
[3.14159, 3.141592, 3.1415926, 3.14159265]
])
# 打印第一行第三列的元素(索引从0开始)
print(arr[0][2]) # 输出:3.141
# 打印第二行第二列的元素(使用逗号分隔索引)
print(arr[1, 1]) # 输出:3.141592
二、代码功能解析
1. 数组结构
arr是一个2行4列的二维数组:第0行:3.1 3.14 3.141 3.1415 第1行:3.14159 3.141592 3.1415926 3.14159265
2. 索引方式
arr[0][2]:- 第一层索引
[0]选择第0行(即[3.1, 3.14, 3.141, 3.1415])。 - 第二层索引
[2]选择该行的第3个元素(值为3.141)1。
- 第一层索引
arr[1, 1]:- 使用逗号分隔的索引
[1, 1]直接定位到第1行第1列的元素(值为3.141592)2。
- 使用逗号分隔的索引
3. 两种索引方式的区别
三、输出示例
3.141
3.141592
四、关键知识点
- 二维数组索引规则
- 行和列索引均从0开始,可组合使用
[行, 列]或分步索引[行][列]。
- 行和列索引均从0开始,可组合使用
- 数据精度与存储
- NumPy自动推断数组为
float64类型,存储约15位有效数字。例如:3.14159265实际存储为3.14159265(未超出精度范围)。
- NumPy自动推断数组为
- 应用场景
- 科学计算中高效访问多维数据(如矩阵运算、图像处理)。
通过这种结构化的分析,用户可以清晰理解NumPy数组的索引机制及性能优化技巧。
示例代码:
# 导入NumPy库并使用别名np
import numpy as np
# 创建一个三维数组,包含不同精度的圆周率近似值
arr = np.array([
[ # 第一层(维度0)
[3.1, 3.14], # 第一行(维度1)
[3.141, 3.1415] # 第二行
],
[ # 第二层(维度0)
[3.14159, 3.141592], # 第一行
[3.1415926, 3.14159265] # 第二行
]
])
# 打印数组的形状(维度信息)
print(arr.shape) # 输出:(2, 2, 2)
# 打印第二层的全部数据(即索引1对应的二维数组)
print(arr[1])
print("-----------------") # 分隔线
# 打印第二层第一行的数据(索引[1,0]对应的子数组)
print(arr[1, 0])
二、代码功能解析
1. 数组结构与形状
arr是一个三维数组,其结构为:- 层(维度0):2层(由外层两个二维数组构成)。
- 行(维度1):每层包含2行。
- 列(维度2):每行包含2列。
arr.shape输出(2, 2, 2),表示三维数组的维度大小3。
2. 索引操作
arr[1]:- 选择第二层(索引1)的全部数据,结果为一个2x2的二维数组:
[[3.14159 3.141592 ] [3.1415926 3.14159265]]
- 选择第二层(索引1)的全部数据,结果为一个2x2的二维数组:
arr[1, 0]:- 直接定位到第二层的第一行(索引0),结果为:
[3.14159 3.141592]
- 直接定位到第二层的第一行(索引0),结果为:
3. 数值精度
- NumPy默认使用
float64类型存储,可保留约15位有效数字。例如:3.14159265实际存储为3.14159265(未超出精度范围)1。
三、关键知识点
1. 多维数组索引
- 逗号分隔索引(如
arr[1,0])直接定位到目标子数组,效率更高。 - 分步索引(如
arr[1][0])等效于逗号分隔,但涉及临时数组生成2。
2. 数组形状(Shape)
shape属性返回元组,表示各维度长度。例如:(2, 2, 2)对应:2层、2行、2列3。
3. 应用场景
- 处理图像数据(如RGB三维数组)、时间序列的多维观测值等。
四、输出示例
(2, 2, 2)
[[3.14159 3.141592 ]
[3.1415926 3.14159265]]
-----------------
[3.14159 3.141592]
五、扩展对比
| 索引方式 | 结果维度 | 示例(针对arr) |
|---|---|---|
arr[1] | 二维数组 (2,2) | 获取第二层的全部数据 |
arr[1, 0] | 一维数组 (2,) | 获取第二层第一行的数据 |
arr[1, 0, 1] | 标量值 | 获取第二层第一行第二列的元素 |
通过灵活使用多维索引,可高效操作复杂数据结构
机器学习之NumPy数组索引与操作
5113

被折叠的 条评论
为什么被折叠?



