news 2026/3/3 19:57:10

深度学习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/2/25 20:27:35

PyCharm vs 手动编码:快捷键带来的效率革命

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比脚本&#xff0c;分别用PyCharm快捷键和手动操作完成相同的编程任务&#xff08;如代码重构、调试、导航&#xff09;&#xff0c;记录每种方法所需时间并生成效率对比…

作者头像 李华
网站建设 2026/2/23 13:45:46

【资深专家亲授】:自动驾驶多模态感知系统调试与实车部署实战指南

第一章&#xff1a;自动驾驶多模态感知系统概述自动驾驶技术的核心在于环境感知能力&#xff0c;而多模态感知系统正是实现这一目标的关键。该系统通过融合多种传感器的数据&#xff0c;构建车辆周围环境的精确三维理解&#xff0c;为路径规划与决策控制提供可靠输入。多模态传…

作者头像 李华
网站建设 2026/2/19 0:51:59

错过后悔一年!2024最值得收藏的智能家居能源优化框架发布

第一章&#xff1a;智能家居 Agent 的能源管理在现代智能家居系统中&#xff0c;智能 Agent 扮演着核心调度角色&#xff0c;尤其在能源管理方面发挥着关键作用。通过实时采集家庭用电设备的运行状态与能耗数据&#xff0c;Agent 能够动态优化能源分配&#xff0c;降低整体功耗…

作者头像 李华
网站建设 2026/3/4 2:02:05

快速验证:用AI工具10分钟搭建wx-open-launch-app原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速生成一个wx-open-launch-app的功能原型&#xff0c;包含基本界面和跳转逻辑。要求代码轻量&#xff0c;能立即运行测试。界面只需包含必要元素&#xff0c;重点展示功能可行性。…

作者头像 李华
网站建设 2026/2/27 14:34:45

医疗康复Agent如何实现动态方案调整?揭秘AI驱动精准康复的3个关键步骤

第一章&#xff1a;医疗康复Agent的方案调整机制概述在智能医疗系统中&#xff0c;医疗康复Agent作为核心决策组件&#xff0c;负责根据患者实时健康数据动态调整治疗与康复方案。其调整机制依赖于多源数据融合、临床知识图谱推理以及个性化学习模型&#xff0c;确保推荐策略既…

作者头像 李华
网站建设 2026/2/25 9:12:41

首次公开:跨国药企内部使用的Agent实验设计模板(含数据建模流程)

第一章&#xff1a;生物制药Agent实验设计的核心理念在现代生物制药研发中&#xff0c;Agent&#xff08;智能体&#xff09;驱动的实验设计正逐步成为加速药物发现与优化的关键范式。这类系统通过模拟生物分子间的相互作用、预测药代动力学特性&#xff0c;并自主迭代实验方案…

作者头像 李华