简介
本全面教程将探讨在Python中创建NumPy数组的基本技术。无论你是数据科学家、研究人员还是程序员,理解NumPy数组创建方法对于科学和分析应用中的高效数值计算和数据处理至关重要。
NumPy 数组基础
什么是 NumPy?
NumPy(数值 Python)是 Python 中科学计算的基础库。它支持大型多维数组和矩阵,并提供大量数学函数来高效地对这些数组进行操作。
NumPy 数组的关键特性
NumPy 数组在几个重要方面与标准 Python 列表不同:
| 特性 | NumPy 数组 | Python 列表 |
|---|---|---|
| 性能 | 高速操作 | 计算速度较慢 |
| 内存效率 | 同构数据类型 | 异构数据类型 |
| 数学运算 | 向量化操作 | 需要显式循环 |
创建基本的 NumPy 数组
import numpy as np
## 创建一维数组
one_dim_array = np.array([1, 2, 3, 4, 5])
## 创建二维数组
two_dim_array = np.array([[1, 2, 3], [4, 5, 6]])
## 创建全零数组
zeros_array = np.zeros((3, 3))
## 创建全一数组
ones_array = np.ones((2, 4))
数组数据类型
NumPy 支持数组的多种数据类型:
graph TD
A[NumPy 数据类型] --> B[整数]
A --> C[浮点数]
A --> D[复数]
A --> E[布尔值]
B --> B1[int8, int16, int32, int64]
C --> C1[float16, float32, float64]
D --> D1[complex64, complex128]
数组属性
## 数组形状
print(one_dim_array.shape) ## 返回数组维度
## 数组数据类型
print(one_dim_array.dtype) ## 返回数组数据类型
## 维度数量
print(two_dim_array.ndim) ## 返回数组维度数量
内存效率
与 Python 列表相比,NumPy 数组的内存效率更高,原因如下:
- 它们存储相同数据类型的元素
- 它们使用连续的内存块
- 它们支持向量化操作
常见的初始化方法
## 创建具有一系列值的数组
range_array = np.arange(0, 10, 2) ## 起始值、结束值、步长
## 创建具有均匀间隔值的数组
linspace_array = np.linspace(0, 1, 5) ## 起始值、结束值、点数
## 创建随机数组
random_array = np.random.rand(3, 3) ## 数组形状
最佳实践
- 将 NumPy 导入为
np - 使用适当的数据类型
- 利用向量化操作
- 注意内存使用情况
通过理解这些 NumPy 数组基础,你将为在 Python 中进行高效的数值计算做好充分准备。LabEx 建议通过实践这些概念来提高熟练程度。
数组创建方法
基本数组创建技术
1. 使用 np.array() 函数
import numpy as np
## 从 Python 列表创建数组
标量数组 = np.array(42)
一维数组 = np.array([1, 2, 3, 4, 5])
二维数组 = np.array([[1, 2, 3], [4, 5, 6]])
2. 专用数组生成函数
graph TD
A[NumPy 数组创建方法] --> B[全零]
A --> C[全一]
A --> D[空数组]
A --> E[全满]
A --> F[基于范围]
A --> G[线性间距]
全零数组
## 创建全零数组
一维零数组 = np.zeros(5)
二维零数组 = np.zeros((3, 4))
全一数组
## 创建全一数组
一维一数组 = np.ones(5)
二维一数组 = np.ones((3, 4), dtype=int)
3. 范围和序列创建
## 使用 arange 创建数组
范围数组 = np.arange(0, 10, 2) ## 起始值、结束值、步长
## 创建均匀间隔的数组
线性间距数组 = np.linspace(0, 1, 5) ## 起始值、结束值、点数
高级数组生成
随机数生成
## 生成随机数组
均匀分布随机数组 = np.random.rand(3, 3) ## 均匀分布
正态分布随机数组 = np.random.randn(3, 3) ## 正态分布
单位矩阵和特殊矩阵
## 创建单位矩阵
单位矩阵 = np.eye(4)
## 创建对角矩阵
对角矩阵 = np.diag([1, 2, 3, 4])
数组创建方法比较
| 方法 | 描述 | 使用场景 |
|---|---|---|
np.array() |
将列表转换为数组 | 通用 |
np.zeros() |
创建全零数组 | 初始化 |
np.ones() |
创建全一数组 | 初始化 |
np.arange() |
创建具有规则间隔的数组 | 数字序列 |
np.linspace() |
创建均匀间隔的数组 | 精确间隔生成 |
np.random |
生成随机数组 | 模拟、测试 |
类型指定
## 创建时指定数据类型
整数数组 = np.array([1, 2, 3], dtype=np.int32)
浮点数数组 = np.array([1.1, 2.2, 3.3], dtype=np.float64)
最佳实践
- 选择最合适的创建方法
- 需要时显式指定数据类型
- 考虑内存效率
- 使用向量化方法提高性能
LabEx 建议通过试验这些方法来了解它们在科学计算中的细微差别和应用。
数组操作
重塑数组
基本重塑技术
import numpy as np
## 原始数组
arr = np.arange(12)
## 重塑为二维数组
reshaped_2d = arr.reshape(3, 4)
## 重塑为三维数组
reshaped_3d = arr.reshape(2, 3, 2)
## 使用 -1 进行自动维度计算
auto_reshape = arr.reshape(3, -1)
数组转置
## 转置二维数组
matrix = np.array([[1, 2, 3], [4, 5, 6]])
transposed = matrix.T
## 多维数组转置
multi_dim = np.arange(24).reshape(2, 3, 4)
transposed_multi = multi_dim.transpose(1, 0, 2)
堆叠与拆分
拼接方法
## 垂直堆叠
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
vertical_stack = np.vstack((arr1, arr2))
## 水平堆叠
horizontal_stack = np.hstack((arr1, arr2))
## 深度堆叠
depth_stack = np.dstack((arr1, arr2))
拆分数组
## 将数组拆分为相等的部分
full_array = np.arange(10)
split_arrays = np.split(full_array, 2)
## 进行不等分拆分
custom_split = np.split(full_array, [3, 7])
数组操作工作流程
graph TD
A[数组操作] --> B[重塑]
A --> C[转置]
A --> D[堆叠]
A --> E[拆分]
B --> B1[reshape]
B --> B2[resize]
C --> C1[transpose]
D --> D1[vstack]
D --> D2[hstack]
E --> E1[split]
E --> E2[hsplit]
高级操作技术
重复和平铺操作
## 重复元素
original = np.array([1, 2, 3])
repeated = np.repeat(original, 3)
## 平铺数组
tiled = np.tile(original, 3)
数组操作方法比较
| 方法 | 目的 | 维度行为 |
|---|---|---|
reshape() |
更改数组形状 | 保留元素总数 |
resize() |
修改数组大小 | 可添加/删除元素 |
transpose() |
交换维度 | 反转数组方向 |
vstack() |
垂直堆叠 | 增加第一维度 |
hstack() |
水平堆叠 | 增加第二维度 |
实际注意事项
- 在操作前始终检查数组维度
- 使用
-1进行自动维度计算 - 注意内存使用
- 理解视图和副本之间的区别
内存视图与副本
## 视图(不分配新内存)
original = np.array([1, 2, 3, 4])
view = original.view()
## 副本(分配新内存)
copied = original.copy()
性能提示
- 使用 NumPy 的内置方法进行高效操作
- 避免不必要的副本
- 利用向量化操作
LabEx 建议通过练习这些操作技术来熟练掌握 NumPy 数组处理。
总结
通过掌握 Python 中的 NumPy 数组创建技术,你将获得强大的技能,用于处理复杂的数值数据、进行科学计算以及在计算研究和软件开发的各个领域实施先进的数据处理策略。



