楼主: 杨文鹃
52 0

人工智能之数据分析 numpy:第十三章 工具衔接与迁移 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-5-7
最后登录
2018-5-7

楼主
杨文鹃 发表于 2025-11-26 07:00:31 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

人工智能之数据分析:NumPy

第十三章 工具衔接与迁移

引言

作为 Python 科学计算的基石,NumPy 不仅具备强大的数值处理能力,还能与多种工具高效协同。本文将从两个重要角度展开系统性解析:

一、从 MATLAB 到 NumPy:语法对照与迁移策略

对于习惯使用 MATLAB 的用户而言,转向 NumPy 的主要障碍通常体现在两个方面:一是编程思维的转变(从以矩阵为核心到以数组为核心),二是语言语法上的差异。

以下为关键功能的对比说明:

核心原则
  • NumPy 使用的是 数组(array) 而非 矩阵(matrix) → 所有运算默认按元素进行
  • 执行矩阵乘法应使用 np.dot()@ 操作符,而非 *
  • 索引起始位置为 0,而非 1
  • 切片操作不会复制数据,而是创建视图(view),实现内存共享
ndarray
matrix
@
np.dot()
*
1. 数组创建方式对比
MATLAB NumPy 说明
[1, 2, 3] np.array([1, 2, 3]) 行向量
[1; 2; 3] np.array([[1], [2], [3]]) 或 np.array([1, 2, 3]).reshape(-1, 1) 列向量
zeros(3,4) np.zeros((3,4)) 注意参数为元组形式
ones(3,3) np.ones((3,3)) 一致
eye(3) np.eye(3) 单位矩阵
rand(2,3) np.random.rand(2,3) 或 np.random.random((2,3)) 生成 [0,1) 区间内的均匀分布随机数
A(:) A.flatten() 或 A.ravel() 展平为一维数组
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)
A(:)
A.flatten()
A.ravel()
[1,2,3]
np.array([1,2,3])

补充说明:MATLAB 中 A(:) 返回的是行向量,而 NumPy 中 ravel() 得到的是一维数组(无行列方向),但在广播机制中可自动适配为行或列。

2. 索引与切片操作对比
MATLAB NumPy 说明
A(1,2) A[0,1] 索引从 0 开始
A(2,:) A[1,:] 获取第 2 行
A(:,3) A[:,2] 获取第 3 列
A(2:end,:) A[1:,:] 从第 2 行至末尾
A([1,3], [2,4]) A[np.ix_([0,2], [1,3])] 或 A[[0,2]][:,[1,3]] 花式索引(返回副本)
A(A>0) A[A>0] 布尔索引(行为一致)
A(2,3)
A[1,2]
A(2,:)
A[1,:]
A(:,3)
A[:,2]
A(2:end, :)
A[1:, :]
A([1,3], :)
A[[0,2], :]
A(A>0.5)
A[A>0.5]

布尔索引转换示例:

MATLAB 中的逻辑表达式 A > 0 在 NumPy 中同样写为 A > 0,但访问方式如下:

A > 0   →   A[A > 0]
A == 5  →   A[A == 5]
    
end
-1
A(:, end)
A[:, -1]
A(2:end-1, :)
A[1:-1, :]
3. 运算与函数对照表
操作类型 MATLAB NumPy
矩阵乘法 A * B np.dot(A, B) 或 A @ B
逐元素乘法 A .* B A * B
转置(非共轭) A.' A.T
共轭转置 A' A.conj().T 或 np.conjugate(A).T
求逆 inv(A) np.linalg.inv(A)
解线性方程 Ax=b A \ b np.linalg.solve(A, b)
特征值分解 eig(A) np.linalg.eig(A)
快速傅里叶变换 FFT fft(x) np.fft.fft(x)
最大值(按列) max(A) np.max(A, axis=0)
水平拼接 [A, B] np.hstack([A, B]) 或 np.concatenate([A, B], axis=1)
垂直拼接 [A; B] np.vstack([A, B]) 或 np.concatenate([A, B], axis=0)
A * B
A @ B
np.dot(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(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 脚本文件(.m.py
  • MATLAB 函数定义 → Python 函数定义(functiondef
  • MATLAB 中的 clear, close all 等命令在 Python 中无需显式调用,因内存由解释器自动管理

示例代码对比:

% MATLAB
function y = myfunc(x)
y = x.^2 + 2*x + 1;
end
    
# Python
def myfunc(x):
    return x**2 + 2*x + 1
    
.py
def func(...):
clear
clc
5. 常见问题及应对方案
问题类型 MATLAB 行为 NumPy 行为 解决方案
* 操作符含义 矩阵乘法 逐元素相乘 改用 np.dot()@
向量维度处理 明确区分行/列向量 一维数组无方向性 需要列向量时使用 reshape(-1, 1)
整数除法 结果可能为浮点 Python 3 中 / 总是浮点除法 无兼容问题
索引越界 报错 报错 行为一致
默认浮点类型 double float64 基本一致
A * B
.reshape(-1,1)
5/2 = 2.5
double
float64

二、NumPy 与 Matplotlib:科学可视化的理想搭档

Matplotlib 是 Python 中最主流的可视化库,与 NumPy 实现了深度集成,二者结合构成了数据分析的标准工作流。

1. 基础绘图流程
import numpy as np
import matplotlib.pyplot as plt

# 使用 NumPy 生成数据
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

# 利用 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 Plot)

x = np.random.randn(100)
y = np.random.randn(100)
colors = np.random.rand(100)

plt.scatter(x, y, c=colors)
plt.colorbar()
plt.show()
    
A * B
A @ B
(1) 散点图绘制(scatter)  
使用随机生成的尺寸数组来控制散点大小,实现可视化效果:  
sizes = 1000 * np.random.rand(100)  
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5)  
plt.colorbar()  
plt.show()

(2) 图像数据展示(imshow)  
适用于热力图或图像类二维数据的呈现方式:  
data = np.random.rand(10, 10)  
plt.imshow(data, cmap='hot', interpolation='nearest')  
plt.colorbar()  
plt.show()  
np.meshgrid()
(3) 直方图构建 基于正态分布数据生成频率分布图: data = np.random.normal(0, 1, 1000) plt.hist(data, bins=30, alpha=0.7) plt.show() (4) 三维曲面绘图(需导入 mpl_toolkits 模块) 通过网格化坐标生成复杂曲面图形: 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() 上述方法是连接 NumPy 数值计算与二维、三维图形显示的核心手段。 3. 进阶应用:结构化数组结合 Matplotlib 可视化 定义带有字段名的结构化数据类型,并进行城市气象数据绘图: 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()
plt.plot(..., rasterized=True)
4. 性能优化建议 ● 避免在循环中逐点绘图 应优先采用向量化操作一次性传递全部数据: # 不推荐:效率较低 for i in range(len(x)): plt.plot(x[i], y[i], 'o') # 推荐:高效处理整个数组 plt.plot(x, y, 'o') ● 处理大规模数据时的策略 建议使用降采样技术或聚合处理以提升渲染效率
df.values
三、常用科学计算工具与 NumPy 的集成关系 | 工具 | 与 NumPy 的关联说明 | |-----------------|----------------------| | Pandas | DataFrame 底层由 NumPy 数组支撑;调用 `.values` 或 `.to_numpy()` 可返回 ndarray | | SciPy | 构建于 NumPy 基础之上,提供高级数学功能如积分、优化和信号处理等 | | scikit-learn | 模型输入要求为标准格式的 NumPy 数组 | | TensorFlow / PyTorch | 张量与 NumPy 数组之间可无缝转换(通过 .numpy() 和 torch.from_numpy 等方法) | | OpenCV | 图像以 H×W×C 格式的 NumPy 数组存储,支持直接像素级操作 |
(n_samples, n_features)
.numpy()
torch.from_numpy()
四、从 MATLAB 向 NumPy 迁移的关键检查清单 - 将矩阵乘法运算符替换:使用 @np.dot() 替代 MATLAB 中的 *
*
@
- 数组索引从 0 开始:原 MATLAB 的 1-based 索引需调整为 0-based
A(1,:)
A[0,:]
- 使用 np.concatenate() 而非 cat 进行数组拼接
np.zeros((m,n))
vs
zeros(m,n)
- 用 np.vstack()np.hstack() 替代 vertcathorzcat
np.linalg.solve(A,b)
代替
A\b
- 使用 np.expand_dims()np.reshape() 管理维度变化
np.arange()
/
np.linspace()
替代
:
- 数组转置操作使用 .Tnp.transpose()
np.newaxis
/
reshape
替代
np.save()
/
np.load()
- 元素级乘法使用 *,而矩阵乘法使用 @
save
/
load
总结要点 ● MATLAB 到 NumPy 的迁移过程中,虽然语法相近,但需特别注意索引起点、乘法含义及维度管理等差异。 ● NumPy 与 Matplotlib 的组合构成了科学数据可视化的主流方案,其核心理念是“数组即数据”,无需额外格式转换即可直接绘图。 ● NumPy 作为 Python 科学计算生态的基础,能够与 Pandas、SciPy 以及主流深度学习框架实现无缝协作。 建议新项目直接采用 NumPy + Matplotlib + Jupyter Notebook 技术栈,开发体验优于传统 MATLAB 环境。

以下是一系列关于机器学习、深度学习、自然语言处理、计算机视觉以及人工智能前沿技术的权威书籍和实用指南,内容涵盖理论基础与实战应用,适合不同层次的学习者和研究人员参考:

《模式识别(第四版)》系统地介绍了模式识别的基本概念与方法,涵盖了统计模式识别、结构模式识别等核心内容,是该领域的重要参考书之一。

ndarray

《深度学习 deep learning》(又称“花书”),由伊恩·古德费洛等人撰写,全面阐述了深度学习的数学基础、模型架构及优化策略,被广泛视为该领域的经典教材。

matrix

《Python深度学习第二版(中文版)》(Francois Chollet 著)以Keras框架为核心,深入讲解如何使用Python构建深度学习模型,强调实践与直觉理解的结合,适合初学者与开发者阅读。

@

《深入浅出神经网络与深度学习》由迈克尔·尼尔森(Michael Nielsen)编写,通过直观的方式引导读者理解神经网络的工作原理,配合代码示例帮助掌握反向传播、梯度下降等关键技术。

np.dot()

《Sklearn与TensorFlow机器学习实用指南》详细介绍了如何利用Scikit-learn和TensorFlow两大主流工具进行机器学习建模,从传统算法过渡到深度学习,具有很强的工程指导性。

*

《TensorFlow机器学习实战指南》聚焦于TensorFlow平台的实际应用,提供大量可运行的案例,帮助读者快速上手并应用于真实项目中。

a = [1, 2, 3]

《自然语言处理综论 第2版》全面覆盖自然语言处理的核心任务与技术,包括句法分析、语义理解、机器翻译等,是NLP领域的系统性经典著作。

a = np.array([1, 2, 3])

《Natural-Language-Processing-with-PyTorch》则侧重于使用PyTorch框架实现现代NLP模型,如RNN、注意力机制与Transformer,适合希望动手实践的研究人员和工程师。

b = [1; 2; 3]

《计算机视觉-算法与应用(中文版)》系统介绍图像处理、特征提取、三维重建等计算机视觉核心技术,理论与实际案例并重,是该领域的重要入门与进阶读物。

b = np.array([[1], [2], [3]])

《Learning OpenCV 4》深入讲解OpenCV 4版本的功能与应用,涵盖图像处理、对象检测、深度学习集成等内容,是开发视觉应用不可或缺的技术手册。

b = np.array([1,2,3]).reshape(-1,1)

《AIGC:智能创作时代》由杜雨与张孜铭合著,探讨生成式人工智能的发展趋势及其在内容创作中的广泛应用,展现AI在艺术、媒体等领域的变革力量。

zeros(2,3)

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》系统解析当前主流的生成式模型技术,包括大语言模型、扩散模型及多模态架构,适合希望从基础入手掌握AIGC技术的读者。

np.zeros((2,3))

《从零构建大语言模型(中文版)》带领读者逐步实现一个完整的语言模型,涵盖数据预处理、模型设计、训练优化等全过程,强调自主构建能力的培养。

ones(2,3)

《实战AI大模型》聚焦于大规模人工智能模型的部署与应用,结合实际场景讲解模型微调、推理优化与工程落地的关键问题。

np.ones((2,3))

《AI 3.0》展望人工智能的未来发展路径,探讨AI在复杂环境下的认知能力提升与通用智能的可能性,兼具技术深度与哲学思考。

eye(3)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Numpy 数据分析 人工智能 NUM scikit-learn

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-31 00:47