NumPy 入门:科学计算的核心库
一、NumPy 是什么?
NumPy(Numerical Python)是 Python 中用于科学计算的核心库,专为处理数组和矩阵设计。它能直接对整个数组执行数学运算,大幅减少循环语句的使用,同时提供了丰富的数学函数,让数据处理和数值计算变得高效简洁。
无论是数据分析、机器学习还是科学计算,NumPy 都是基础工具 —— 后续的 Pandas、Matplotlib 等库都依赖于它的数据结构。
二、安装与导入
1. 安装方法
NumPy 不是 Python 标准库,需手动安装,推荐使用国内源加速:
# 方法1:使用pip
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
# 方法2:使用conda(适合Anaconda环境)
conda install numpy
2. 导入方式
惯例是导入时起别名np,方便后续使用:
import numpy as np
三、核心对象:Ndarray(N 维数组)
Ndarray 是 NumPy 的核心数据结构,代表 “N 维数组”,是一系列同类型数据的集合,以 0 为起始下标索引。它的关键特点:
- 所有元素数据类型一致(保证计算效率);
- 支持多维(1D 向量、2D 矩阵、3D 及更高维度);
- 通过 “轴(axis)” 区分维度:axis=0 表示第 1 维(行方向),axis=1 表示第 2 维(列方向),更高维度依次类推。
四、创建 Ndarray 数组的常用函数
NumPy 提供了多种创建数组的函数,覆盖不同场景需求:
| 函数 | 作用 | 关键参数 | 示例 |
|---|---|---|---|
array() | 从列表 / 嵌套列表创建数组 | object(输入数据)、dtype(数据类型) | np.array([1,2,3]) → [1 2 3] |
empty(shape) | 创建指定形状的未初始化数组(值随机) | shape(形状,如 (3,2)) | np.empty((2,2)) → 2x2 随机值数组 |
zeros(shape) | 创建全 0 数组 | shape、dtype(默认 float) | np.zeros(3) → [0. 0. 0.] |
ones(shape) | 创建全 1 数组 | shape、dtype | np.ones((2,3), dtype=int) → [[1 1 1],[1 1 1]] |
full(shape, fill_value) | 创建填充指定值的数组 | shape、fill_value(填充值) | np.full((3,2), 1024) → 3x2 全为 1024 的数组 |
eye(N, M) | 创建对角矩阵(对角线为 1,其余为 0) | N(行数)、M(列数,默认 = N) | np.eye(3) → 3x3 单位矩阵 |
arange(start, stop, step) | 生成等差数列(类似 range) | start(起始)、stop(终止,不含)、step(步长) | np.arange(1,11,2) → [1 3 5 7 9] |
linspace(start, stop, num) | 生成等间隔的等差数列(含终止值) | num(样本数,默认 50) | np.linspace(0,1,5) → [0. 0.25 0.5 0.75 1. ] |
logspace(start, stop, num) | 生成等比数列(以 base 为底) | base(底数,默认 10) | np.logspace(1,2,10) → 10 到 100 的 10 个等比数 |
随机数组创建函数
NumPy 的random模块提供了多种随机数生成函数,适合模拟和抽样:
| 函数 | 作用 | 示例 |
|---|---|---|
np.random.rand(d0,d1...) | 生成 [0,1) 之间的随机数(均匀分布) | np.random.rand(2,3) → 2x3 随机数组 |
np.random.random(size) | 生成 [0,1) 随机数(一维数组) | np.random.random(5) → 长度 5 的一维随机数组 |
np.random.randint(low, high, size) | 生成 [low, high) 的整数随机数 | np.random.randint(1,10,(2,2)) → 2x2 的 1-9 整数 |
np.random.randn(d0,d1...) | 生成标准正态分布(均值 0,标准差 1)的随机数 | np.random.randn(3) → 3 个符合标准正态分布的数 |
np.random.normal(loc, scale, size) | 生成高斯分布随机数 | np.random.normal(loc=1, scale=2, size=5) → 均值 1、标准差 2 的 5 个数 |
五、Ndarray 的核心属性
通过属性可以快速了解数组的基本信息:
| 属性 | 含义 | 示例(数组arr = np.array([[1,2,3],[4,5,6]])) |
|---|---|---|
ndim | 维度(秩) | arr.ndim → 2(二维数组) |
shape | 形状(n 行 m 列) | arr.shape → (2,3)(2 行 3 列) |
size | 元素总个数 | arr.size → 6(2×3) |
dtype | 元素数据类型 | arr.dtype → int64(默认整数类型) |
itemsize | 每个元素的字节大小 | arr.itemsize → 8(int64 占 8 字节) |
六、切片与索引
Ndarray 的索引和切片与 Python 列表类似,但支持多维操作,语法简洁:
1. 基本索引(获取单个元素)
arr = np.arange(15).reshape(5,3) # 创建5行3列的数组
print(arr[2][1]) # 第3行第2列(下标从0开始)→ 7
print(arr[2,1]) # 等价写法 → 7
2. 切片(获取子数组)
# 取第3行及之后的所有行
print(arr[2:]) # → [[6 7 8], [9 10 11], [12 13 14]]
# 取第2-4行(不含第5行),第2列及之后
print(arr[1:4, 1:]) # → [[4 5], [7 8], [10 11]]
3. 省略号(...)
用于简化多维数组的索引,自动补全维度:
# 取所有行的第2列
print(arr[..., 1]) # → [1 4 7 10 13]
# 取第2行的所有列
print(arr[1, ...]) # → [3 4 5]
七、NumPy 数组 vs Python 列表
| 特点 | NumPy 数组 | Python 列表 |
|---|---|---|
| 元素类型 | 所有元素类型必须一致 | 可包含不同类型元素 |
| 运算效率 | 支持向量化运算(直接对整个数组操作),速度快 | 需循环逐个元素操作,效率低 |
| 内存占用 | 存储紧凑,内存效率高 | 存储松散,内存占用大 |
| 功能 | 内置大量数学函数(求和、均值等) | 功能简单,需手动实现复杂运算 |
八、入门练习
-
生成一个 3×3 的对角矩阵(对角线为 1,其余为 0):
np.eye(3) -
创建长度为 10 的数组,值在 0~1 之间(不含 0 和 1):
np.random.random(10) # 或 np.linspace(0,1,12)[1:-1] -
创建长度为 10 的全 0 数组,第 5 个元素为 1(下标从 0 开始):
arr = np.zeros(10) arr[4] = 1 # 第5个元素下标为4
NumPy 是数据科学的基石,掌握其数组创建、属性和索引操作,能为后续数据分析和机器学习打下坚实基础。后续可进一步学习数组的数学运算、广播机制等高级特性~

270

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



