第十三章 工具衔接与迁移
NumPy 作为 Python 科学计算的核心库,不仅功能强大,还与众多工具无缝衔接。本文从两个关键方向系统讲解:
MATLAB 用户迁移到 NumPy 时,最大的挑战是 思维转换(从矩阵中心到数组中心)和 语法差异。以下是核心对照表。
ndarray,不是
matrix → 所有运算默认是
逐元素的@ 或
np.dot(),不是
*| MATLAB | NumPy | 说明 |
| ----------------------- | -------------------------------------------------------------------------------- | -------------------------- |
|
a = [1, 2, 3] |
a = np.array([1, 2, 3]) | 行向量 |
|
b = [1; 2; 3] |
b = np.array([[1], [2], [3]]) 或
b = np.array([1,2,3]).reshape(-1,1) | 列向量 |
|
zeros(2,3) |
np.zeros((2,3)) | 注意:
元组参数 |
|
ones(2,3) |
np.ones((2,3)) | |
|
eye(3) |
np.eye(3) | 单位矩阵 |
|
linspace(0,1,5) |
np.linspace(0,1,5) | 相同 |
|
rand(2,3) |
np.random.rand(2,3) | 均匀分布 [0,1) |
|
A(:) |
A.flatten() 或
A.ravel() | 展平为一维 |
💡 MATLAB 的
[1,2,3]是行向量,NumPy 的np.array([1,2,3])是一维数组(无行列之分),但在广播中可视为行或列。
| MATLAB | NumPy | 说明 |
| ------------------- | ------------------- | ---------------------------- |
|
A(2,3) |
A[1,2] | 索引从 0 开始 |
|
A(2,:) |
A[1,:] | 第 2 行 |
|
A(:,3) |
A[:,2] | 第 3 列 |
|
A(2:end, :) |
A[1:, :] | 从第 2 行到末尾 |
|
A([1,3], :) |
A[[0,2], :] | 花式索引(注意:返回副本) |
|
A(A>0.5) |
A[A>0.5] | 布尔索引(相同!) |
⚠️ MATLAB 的
end在 NumPy 中用-1表示:
A(:, end)→A[:, -1]A(2:end-1, :)→A[1:-1, :]
| 操作 | MATLAB | NumPy |
| ------------ | ------------------------------------------- | ------------------------------------------------------ |
| 矩阵乘法 |
A * B |
A @ B 或
np.dot(A, B) |
| 逐元素乘法 |
A .* B |
A * B |
| 转置 |
A.'(非共轭)
A'(共轭转置) |
A.T(总是非共轭)
A.conj().T(共轭转置) |
| 求逆 |
inv(A) |
np.linalg.inv(A) |
| 解方程 |
A \ b |
np.linalg.solve(A, b) |
| 特征值 |
[V,D] = eig(A) |
eigvals, eigvecs = np.linalg.eig(A) |
| FFT |
fft(x) |
np.fft.fft(x) |
| 最大值 |
max(A)(按列) |
np.max(A, axis=0) |
| 拼接 |
[A, B](水平)
[A; B](垂直) |
np.hstack([A,B])
np.vstack([A,B]) |
.py 文件)def func(...):)clear,
clc →
不需要(Python 自动管理内存)% MATLAB function y = myfunc(x) y = x.^2 + 2*x + 1; end
# Python def myfunc(x): return x**2 + 2*x + 1
| 问题 | MATLAB 行为 | NumPy 行为 | 解决方案 |
| -------------- | ----------------- | ----------------------------- | ------------------------------------ |
|
A * B | 矩阵乘法 | 逐元素乘法 | 用
A @ B |
| 向量维度 | 明确区分行/列 | 一维数组无行列 | 需要列向量时用
.reshape(-1,1) |
| 整数除法 |
5/2 = 2.5 |
5/2 = 2.5(Python 3) | 无问题 |
| 索引越界 | 报错 | 报错 | 相同 |
| 默认浮点类型 |
double |
float64 | 相同 |
Matplotlib 是 Python 最主流的绘图库,与 NumPy 天然集成。
import numpy as np
import matplotlib.pyplot as plt
# 1. 用 NumPy 生成数据
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
# 2. 用 Matplotlib 绘图
plt.plot(x, y, label='sin(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Sine Wave')
plt.legend()
plt.grid(True)
plt.show()
✅ 关键点: Matplotlib 直接接受 NumPy 数组作为输入,无需转换。
x = np.random.randn(100) y = np.random.randn(100) colors = np.random.rand(100) sizes = 1000 * np.random.rand(100) plt.scatter(x, y, c=colors, s=sizes, alpha=0.5) plt.colorbar() plt.show()
# 生成 2D 数组(如热力图、图像) data = np.random.rand(10, 10) plt.imshow(data, cmap='hot', interpolation='nearest') plt.colorbar() plt.show()
data = np.random.normal(0, 1, 1000) plt.hist(data, bins=30, alpha=0.7) plt.show()
from mpl_toolkits.mplot3d import Axes3D x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) # ← 广播生成网格! Z = np.sin(np.sqrt(X**2 + Y**2)) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, cmap='viridis') plt.show()
🔥
np.meshgrid()是连接 NumPy 与 2D/3D 绘图的关键函数!
# 结构化数据
dt = np.dtype([('city', 'U10'), ('temp', 'f4'), ('humidity', 'f4')])
weather = np.array([
('Beijing', 30.0, 40.0),
('Shanghai', 35.0, 70.0),
('Guangzhou', 33.0, 80.0)
], dtype=dt)
# 绘制温度柱状图
plt.bar(weather['city'], weather['temp'])
plt.ylabel('Temperature (°C)')
plt.show()
```python
for i in range(len(x)): plt.plot(x[i], y[i], 'o')
plt.plot(x, y, 'o') ```
plt.plot(..., rasterized=True) 或降采样| 工具 | 与 NumPy 的关系 |
|---|---|
| Pandas | DataFrame 底层是 NumPy 数组;
df.values 返回 ndarray |
| SciPy | 基于 NumPy,提供高级科学计算(优化、积分、信号处理等) |
| scikit-learn | 输入要求为
(n_samples, n_features) 的 NumPy 数组 |
| TensorFlow / PyTorch | 张量可与 NumPy 数组互转(
.numpy(),
torch.from_numpy()) |
| OpenCV | 图像即 NumPy 数组(H×W×C),可直接操作像素 |
* 改为
@(矩阵乘法)A(1,:) →
A[0,:])np.zeros((m,n)) 而非
zeros(m,n)np.linalg.solve(A,b) 代替
A\bnp.arange() 或
np.linspace() 代替
:np.newaxis 或
reshape 处理维度np.save() /
np.load() 代替
save /
load📌 建议:新项目直接使用 NumPy + Matplotlib + Jupyter Notebook,体验远超 MATLAB!
本文主要讲述了numpy数据持久化。python过渡项目部分代码已经上传至gitee,后续会逐步更新,主要受时间原因限制,当然自己也可以克隆到本地学习拓展。
公众号:咚咚王 gitee: https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》 《利用Python进行数据分析》 《算法导论中文第三版》 《概率论与数理统计(第四版) (盛骤) 》 《程序员的数学》 《线性代数应该这样学第3版》 《微积分和数学分析引论》 《(西瓜书)周志华-机器学习》 《TensorFlow机器学习实战指南》 《Sklearn与TensorFlow机器学习实用指南》 《模式识别(第四版)》 《深度学习 deep learning》伊恩·古德费洛著 花书 《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》 《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》 《自然语言处理综论 第2版》 《Natural-Language-Processing-with-PyTorch》 《计算机视觉-算法与应用(中文版)》 《Learning OpenCV 4》 《AIGC:智能创作时代》杜雨+&+张孜铭 《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》 《从零构建大语言模型(中文版)》 《实战AI大模型》 《AI 3.0》
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048224/viewspace-3103244/ ,如需转载,请注明出处,否则将追究法律责任。