news 2026/3/26 20:47:31

深度学习1:Python基础库NumPy与Matplotlib

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习1:Python基础库NumPy与Matplotlib

本文章知识来源于《深度学习入门》 (鱼书),特此声明。可以当做读数笔记来进行阅读。

NumPy

在深度学习的实现中,经常出现数组和矩阵的计算。NumPy的数组类 (numpy.array)中提供了很多便捷的方法,在实现深度学习时,我们将使用这些方法。

核心功能:

  1. 多维数组对象(ndarray):所有元素类型相同,由dtype属性指定,如int32float64等,通过shape属性表示各维度大小,例如二维数组形状为(行数, 列数)元素在内存中连续存储,便于快速访问和运算
  2. **高效存储与计算:**基于C语言实现,数组存储紧凑,运算速度远超Python原生列表。支持向量化操作,避免显式循环,大幅提升代码简洁性和执行效率
  3. **广播机制:**支持不同形状数组间的运算,简化数据处理逻辑
  4. **丰富的数学函数库:**提供全面的数学函数,包括统计函数、线性代数函数、傅里叶变换等
  5. **集成性强:**与Pandas、SciPy、Matplotlib等库深度整合,是数据分析和机器学习的基础
pipinstallnumpy
importnumpyasnpprint(np.__version__)# 2.2.6

生成数组

# 从列表创建一维数组a=np.array([1,2,3,4,5])# [1 2 3 4] type:<class 'numpy.ndarray'>print(f'{a}type:{type(a)}')# 从列表创建二维数组# [[1 2 3]# [4 5 6]] type:<class 'numpy.ndarray'>b=np.array([[1,2,3],[4,5,6]])print(f'{b}type:{type(b)}')# 创建全零二维数组#[[0. 0. 0.]# [0. 0. 0.]] type:<class 'numpy.ndarray'>zeros=np.zeros((2,3))print(f'{zeros}type:{type(zeros)}')# 创建全一二维数组#[[1. 1. 1.]# [1. 1. 1.]# [1. 1. 1.]] type:<class 'numpy.ndarray'>ones=np.ones((3,3))print(f'{ones}type:{type(ones)}')# 创建等差数列arange=np.arange(start=0,stop=10,step=2)# [0 2 4 6 8]print(arange)# 创建随机数组rand=np.random.rand(2,2)print(rand)

算数运算

x=np.array([1.0,2.0,3.0])y=np.array([2.0,4.0,6.0])# 如果元素个数不同,程序就会报错# “对应元素的”的英文是element-wisex+y# 对应元素的加法 [ 3., 6., 9.]x-y# [ -1., -2., -3.]x*y# [ 2., 8., 18.]x/y# [ 0.5, 0.5, 0.5]x=np.array([1.0,2.0,3.0])x/2.0# [ 0.5, 1. , 1.5] 也叫做广播

N维数组

A=np.array([[1,2],[3,4]])print(A)# [[1 2]# [3 4]]A.shape# (2,2) 表示两行,两列的矩阵A.dtype# dtype('int64')

和数组的算术运算一样,矩阵的算术运算也可以在相同形状的矩阵间以

对应元素的方式进行。并且,也可以通过标量(单一数值)对矩阵进行算术运算。

这也是基于广播的功能

A=np.array([[1,2],[3,4]])B=np.array([[3,0],[0,6]])A+B# array([[ 4, 2],# [ 3, 10]])A*B# array([[ 3, 0],# [ 0, 24]])

NumPy数组(np.array)可以生成_N_维数组,即可以生成一维数组、

二维数组、三维数组等任意维数的数组。数学上将一维数组称为向量,

将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统

称为张量(tensor)。

广播

NumPy中,形状不同的数组之间也可以进行运算。

A=np.array([[1,2],[3,4]])# 2*2 的矩阵A和标量10 做乘法运算A*10

标量10 被扩展成了 2* 2 的形状,然后再与矩阵A进行乘法运算,这个功能称为 广播 (broadcast)

再看一个例子:

A=np.array([[1,2],[3,4]])B=np.array([10,20])A*B# array([[ 10, 40],# [ 30, 80]])

Matplotlib

在深度学习的实验中,图形的绘制和数据的可视化非常重要。Matplotlib是用于绘制图形的库,使用Matplotlib可以轻松地绘制图形和实现数据的可视化。

""" 全局设置 """# 设置中文字体plt.rcParams['font.sans-serif']=['SimHei','DejaVu Sans']plt.rcParams['axes.unicode_minus']=Falseif__name__=='__main__':# 创建一个绘图窗口, 宽 15英寸,高 10 英寸fig=plt.figure(figsize=(15,10))# 顶部绘制文字,18号,加粗fig.suptitle('初中阶段基本函数图像',fontsize=18,fontweight='bold')# 使用GridSpec创建2x3的子图布局# 第一行: 一次函数,二次函数, 反比例函数# 第二行: 正比例函数,常数函数, 绝对值函数gs=gridspec.GridSpec(2,3,figure=fig)# 1. 一次函数 y = 2x + 1plot_linear_function(gs)# 2. 二次函数 y = x²plot_quadratic_function(gs)# 3. 反比例函数 y = 1/xplot_inverse_proportion_function(gs)# 4. 正比例函数 y = xplot_proportion_function(gs)# 5. 常数函数 y = 3plot_constant_function(gs)# 6. 绝对值函数 y = |x|plot_absolute_value_function(gs)# 调整子图间距# rect=[0, 0, 1, 0.96] 定义了子图布局的矩形区域:# [左, 下, 右, 上] 分别对应矩形区域的边界# 0, 0 表示左侧和底部从0开始# 1, 0.96 表示右侧到1结束,顶部到0.96结束plt.tight_layout(rect=[0,0,1,0.96])# 添加函数特点说明# 坐标(0.02, 0.02)表示文本左下角的位置(相对坐标,0-1之间)fig.text(0.02,0.02,'初中阶段主要函数特点:\n''1. 一次函数:直线,斜率为常数\n''2. 二次函数:抛物线,开口方向由系数决定\n''3. 反比例函数:双曲线,以坐标轴为渐近线\n''4. 正比例函数:经过原点的直线\n''5. 常数函数:平行于x轴的直线\n''6. 绝对值函数:V形,关于y轴对称',fontsize=11,bbox=dict(boxstyle="round,pad=0.5",facecolor="lightyellow",alpha=0.8))plt.show()
defplot_linear_function(gs):""" 绘制一次函数 """# 定义x的取值范围x=np.linspace(-10,10,400)# 1. 一次函数 y = 2x + 1# gs 是一个 2*3 的布局,# fig.add_subplot(gs[0, 0]) 表示在 0行 0列 创建一个子图ax1=fig.add_subplot(gs[0,0])y=2*x+1# 绘制一次函数图像,plot是: matplotlib中用于绘制线条图的方法# x: x轴坐标数据(-10到10的400个点)# y: y轴坐标数据(根据函数y = 2x + 1计算得出)# 'b-': 绘制样式,b表示蓝色(blue),-表示实线# linewidth=2: 线条宽度为2个像素# label='y = 2x + 1': 图例标签,显示函数表达式ax1.plot(x,y,'b-',linewidth=2,label='y = 2x + 1')# 是matplotlib中用于绘制水平线的方法# y=0: 水平线的y坐标位置,在这里是在y=0的位置,即x轴位置# color='k': 线条颜色,'k'表示黑色(black)# linewidth=0.5: 线条宽度为0.5个像素# alpha=0.5: 线条透明度,0.5表示半透明ax1.axhline(y=0,color='k',linewidth=0.5,alpha=0.5)ax1.axvline(x=0,color='k',linewidth=0.5,alpha=0.5)# 标题ax1.set_title('一次函数',fontsize=14,fontweight='bold')ax1.set_xlabel('x')ax1.set_ylabel('y')# 设置x轴的最小值为-10,最大值为10ax1.set_xlim(-10,10)# 设置y轴的最小值为-10,最大值为10ax1.set_ylim(-10,10)# 为图表添加网格线:ax1.grid(True,alpha=0.3)# 显示图例,用于标识图表中的不同数据系列 指定图例显示在图表的左上角位置ax1.legend(loc='upper left')# 设置坐标轴的纵横比 'equal' 表示x轴和y轴的比例相等,即单位长度相同# adjustable='box' 表示通过调整坐标轴的边界框来保持比例ax1.set_aspect('equal',adjustable='box')
defplot_quadratic_function(gs):""" 二次函数 y = x² :param gs: :return: """ax=fig.add_subplot(gs[0,1])x=np.linspace(-10,10,400)y=x**2ax.plot(x,y,'r-',linewidth=2,label='y = x²')ax.axhline(y=0,color='k',linewidth=0.5,alpha=0.5)ax.axvline(x=0,color='k',linewidth=0.5,alpha=0.5)ax.set_title('二次函数',fontsize=14,fontweight='bold')ax.set_xlabel('x')ax.set_ylabel('y')# x 轴的最小值为-5,最大值为5ax.set_xlim(-5,5)# y 轴的最小值为-2,最大值为10ax.set_ylim(-2,10)ax.grid(True,alpha=0.3)ax.legend(loc='upper center')ax.set_aspect('equal',adjustable='box')
defplot_inverse_proportion_function(gs):""" 正比例函数 y = x :param gs: :return: """ax=fig.add_subplot(gs[0,2])# 创建从-10到-0.1的200个均匀分布的数据点 避开x=0点,防止除零错误x_begin=np.linspace(-10,-0.1,200)# 创建从0.1到10的200个均匀分布的数据点 同样避开x=0点x_end=np.linspace(0.1,10,200)# 使用 np.concatenate 将 x_begin 和 x_end 两个数组连接成一个完整的数组x=np.concatenate([x_begin,x_end])y=1/x# g表示greenax.plot(x,y,'g-',linewidth=2,label='y = 1/x')ax.axhline(y=0,color='k',linewidth=0.5,alpha=0.5)ax.axvline(x=0,color='k',linewidth=0.5,alpha=0.5)ax.set_title('反比例函数',fontsize=14,fontweight='bold')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_xlim(-10,10)ax.set_ylim(-10,10)ax.grid(True,alpha=0.3)ax.legend(loc='upper left')ax.set_aspect('equal',adjustable='box')
defplot_proportion_function(gs):""" 正比例函数 y = x :param gs: :return: """x=np.linspace(-10,10,400)ax=fig.add_subplot(gs[1,0])y=x ax.plot(x,x,'m-',linewidth=2,label='y = x')ax.axhline(y=0,color='k',linewidth=0.5,alpha=0.5)ax.axvline(x=0,color='k',linewidth=0.5,alpha=0.5)ax.set_title('正比例函数',fontsize=14,fontweight='bold')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_xlim(-10,10)ax.set_ylim(-10,10)ax.grid(True,alpha=0.3)ax.legend(loc='upper left')ax.set_aspect('equal',adjustable='box')
defplot_constant_function(gs):""" 常数函数 y = 3 :param gs: :return: """ax=fig.add_subplot(gs[1,1])x=np.linspace(-10,10,400)# x所有元素都等于1y=np.ones_like(x)*3ax.plot(x,y,'c-',linewidth=2,label='y = 3')ax.axhline(y=0,color='k',linewidth=0.5,alpha=0.5)ax.axvline(x=0,color='k',linewidth=0.5,alpha=0.5)ax.set_title('常数函数',fontsize=14,fontweight='bold')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_xlim(-10,10)ax.set_ylim(-5,5)ax.grid(True,alpha=0.3)ax.legend(loc='upper right')ax.set_aspect('equal',adjustable='box')
defplot_absolute_value_function(gs):""" 绝对值函数 y = |x| :param gs: :return: """ax=fig.add_subplot(gs[1,2])x=np.linspace(-10,10,400)y=np.abs(x)ax.plot(x,y,'y-',linewidth=2,label='y = |x|')ax.axhline(y=0,color='k',linewidth=0.5,alpha=0.5)ax.axvline(x=0,color='k',linewidth=0.5,alpha=0.5)ax.set_title('绝对值函数',fontsize=14,fontweight='bold')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_xlim(-10,10)ax.set_ylim(-2,10)ax.grid(True,alpha=0.3)ax.legend(loc='upper center')ax.set_aspect('equal',adjustable='box')
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/19 13:26:50

(智能Agent赋能高效仓储):重新定义现代物流空间利用标准

第一章&#xff1a;智能Agent驱动的仓储空间重构在现代智慧物流体系中&#xff0c;仓储空间的动态优化已成为提升运营效率的核心环节。传统静态分区与人工调度模式难以应对高频次、多品类的出入库需求&#xff0c;而基于智能Agent的自主协同机制正逐步重构仓储管理逻辑。通过部…

作者头像 李华
网站建设 2026/3/25 5:31:41

企业级项目中SLF4J绑定冲突实战解决方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个SLF4J冲突解决指南应用&#xff0c;包含以下功能&#xff1a;1) 常见冲突场景案例库&#xff08;Spring Boot、Maven多模块等&#xff09;&#xff1b;2) 分步骤解决方案流…

作者头像 李华
网站建设 2026/3/22 11:12:57

解决脉冲镀铜难题,脉冲镀铜添加剂选型要点

攻克脉冲镀铜难关&#xff0c;无锡中镀科技助您精准选择脉冲镀铜添加剂在电子制造等众多行业中&#xff0c;脉冲镀铜技术扮演着极为关键的角色。然而&#xff0c;脉冲镀铜过程中常常会遇到各种各样的难题&#xff0c;这时候&#xff0c;脉冲镀铜添加剂的合理选型就显得至关重要…

作者头像 李华
网站建设 2026/3/24 9:40:14

1小时验证:用AI快速搭建Google镜像原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速生成一个Google镜像最小可行产品(MVP)&#xff0c;要求&#xff1a;1. 1小时内可完成部署 2. 只保留核心搜索功能 3. 使用现成模板 4. 支持快速迭代 5. 提供后续扩展建议。优先…

作者头像 李华
网站建设 2026/3/25 4:35:15

如何用AI快速找到并下载Postman历史版本

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个智能版本查询工具&#xff0c;输入Postman版本号或发布日期范围&#xff0c;自动从官方存档或镜像站点检索可下载的旧版本。要求&#xff1a;1)支持模糊查询和精确查询 2)显…

作者头像 李华
网站建设 2026/3/22 18:36:46

告别手动配置:AI自动化UDP/TCP性能调优

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个网络协议自动调优系统&#xff0c;功能&#xff1a;1) 自动检测当前网络环境(延迟、丢包率等)&#xff1b;2) 基于机器学习推荐UDP/TCP最佳参数(如窗口大小、超时设置等)&a…

作者头像 李华