首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >人工智能之数据分析 numpy:第十三章 工具衔接与迁移

人工智能之数据分析 numpy:第十三章 工具衔接与迁移

原创
作者头像
咚咚王
发布2025-11-24 18:13:46
发布2025-11-24 18:13:46
320
举报

人工智能之数据分析 numpy

第十三章 工具衔接与迁移


前言

NumPy 作为 Python 科学计算的核心库,不仅功能强大,还与众多工具无缝衔接。本文从两个关键方向系统讲解:


一、从 MATLAB 到 NumPy:语法对照与迁移指南

MATLAB 用户迁移到 NumPy 时,最大的挑战是思维转换(从矩阵中心到数组中心)和语法差异。以下是核心对照表。

✅ 基本原则

  • NumPy 使用 ndarray,不是 matrix → 所有运算默认是逐元素
  • 矩阵乘法用 @np.dot(),不是 *
  • 索引从 0 开始,不是 1
  • 切片不复制数据(视图机制)

1. 数组创建对照

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]) 是一维数组(无行列之分),但在广播中可视为行或列。


2. 索引与切片

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, :]


3. 运算与函数

操作

MATLAB

NumPy

矩阵乘法

A * B

A @ Bnp.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]) |


4. 控制流与脚本结构

  • MATLAB 脚本 → Python 脚本(.py 文件)
  • MATLAB 函数文件 → Python 函数(def func(...):
  • MATLAB 的 clear, clc不需要(Python 自动管理内存)
代码语言:matlab
复制
% MATLAB
function y = myfunc(x)
    y = x.^2 + 2*x + 1;
end
代码语言:python
复制
# Python
def myfunc(x):
    return x**2 + 2*x + 1

5. 常见陷阱与解决方案

问题

MATLAB 行为

NumPy 行为

解决方案

A * B

矩阵乘法

逐元素乘法

A @ B

向量维度

明确区分行/列

一维数组无行列

需要列向量时用 .reshape(-1,1)

整数除法

5/2 = 2.5

5/2 = 2.5(Python 3)

无问题

索引越界

报错

报错

相同

默认浮点类型

double

float64

相同


二、NumPy 与 Matplotlib:科学可视化黄金组合

Matplotlib 是 Python 最主流的绘图库,与 NumPy 天然集成

1. 基础绘图流程

代码语言:python
复制
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 数组作为输入,无需转换。


2. 常见图表与 NumPy 数据

(1) 散点图(Scatter)

代码语言:python
复制
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()

(2) 图像显示(imshow)

代码语言:python
复制
# 生成 2D 数组(如热力图、图像)
data = np.random.rand(10, 10)

plt.imshow(data, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.show()

(3) 直方图

代码语言:python
复制
data = np.random.normal(0, 1, 1000)
plt.hist(data, bins=30, alpha=0.7)
plt.show()

(4) 3D 曲面(需 mpl_toolkits)

代码语言:python
复制
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 绘图的关键函数!


3. 高级技巧:结构化数组 + Matplotlib

代码语言:python
复制
# 结构化数据
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()

4. 性能提示

  • 避免循环绘图:一次性传入整个数组
代码语言: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),可直接操作像素


四、迁移 checklist(MATLAB → NumPy)

  • * 改为 @(矩阵乘法)
  • 索引减 1(A(1,:)A[0,:]
  • np.zeros((m,n)) 而非 zeros(m,n)
  • np.linalg.solve(A,b) 代替 A\b
  • np.arange()np.linspace() 代替 :
  • np.newaxisreshape 处理维度
  • np.save() / np.load() 代替 save / load

总结

  • MATLAB → NumPy:语法相似但细节差异大,重点注意索引、乘法、维度
  • NumPy + Matplotlib:科学可视化的标准组合,数组即数据,无需转换
  • 生态协同:NumPy 是整个 Python 科学栈的基石,与 Pandas、SciPy、深度学习框架无缝集成

📌 建议:新项目直接使用 NumPy + Matplotlib + Jupyter Notebook,体验远超 MATLAB!

后续

本文主要讲述了numpy数据持久化。python过渡项目部分代码已经上传至gitee,后续会逐步更新,主要受时间原因限制,当然自己也可以克隆到本地学习拓展。

资料关注

公众号:咚咚王

《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》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 人工智能之数据分析 numpy
  • 前言
  • 一、从 MATLAB 到 NumPy:语法对照与迁移指南
    • ✅ 基本原则
    • 1. 数组创建对照
    • 2. 索引与切片
    • 3. 运算与函数
    • 4. 控制流与脚本结构
    • 5. 常见陷阱与解决方案
  • 二、NumPy 与 Matplotlib:科学可视化黄金组合
    • 1. 基础绘图流程
    • 2. 常见图表与 NumPy 数据
      • (1) 散点图(Scatter)
      • (2) 图像显示(imshow)
      • (3) 直方图
      • (4) 3D 曲面(需 mpl_toolkits)
    • 3. 高级技巧:结构化数组 + Matplotlib
    • 4. 性能提示
  • 三、其他重要工具衔接
  • 四、迁移 checklist(MATLAB → NumPy)
  • 总结
  • 后续
  • 资料关注
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档