首页/文章/ 详情

手把手教你安装GPU版Pytorch环境及手把手带大家跑通第一个故障诊断案例!!!(上)

1月前浏览415

故障诊断方向而言,无论是信号处理、特征提取、故障分类还是寿命预测,所有的方法实现基本都依靠于Python代码,很多小白遇到的第一个拦路虎便是代码环境的配置

Pytorch是Python第三方库的一种,里面包含很多深度学习机器学习的函数,Pytorch本身有两个版本,一个是简便的CPU版本,一个是高速高效的GPU版本。另外代码编辑器可以直接用于编写、编辑和运行代码。它们提供了代码高亮、自动补全、代码调试、版本控制集成等功能,以提高开发效率和代码质量,也是故障诊断相关代码的必备工具之一。

本期给大家带来Pytorch环境(Anaconda)安装教,并附带代码编辑器配置过程。每一部分内容都附带推荐的视频教程以及教程链接,保证每一位故障诊断学习者都能搭建自己的代码平台。此外,后续文章还手把手带大家跑通第一个故障诊断案例,代码包含数据处理,1DCNN模型搭建,模型训练,以及模型评估等故障诊断完整过,特别适合研一、研二小白入门。

      本期涉及代码非常详细,所占篇幅也非常多,所以分三次呈现给大家,该文章是本期第1篇文章,主要介绍了Python环境以及各个软件环境安装。第2篇文章主要介绍西储大学数据集以及一些所需深度学习基础知识,文章后半部分讲解了本期代码的数据预处理以及数据切割等部分。第3篇文章主要构建1DCNN模型框架以及模型训练模型检测等内容。

软件及环境链接:通过点击最左下角的阅读原文进行在线下载

目录

1 引言

2 安装Anaconda

   2.1 Anaconda介绍

   2.2 Anaconda安装

3 配置Pytorch环境(CPU版)

   3.1 Pytorch介绍

   3.2 Pytorch配置教程(CPU版)

4 配置Pytorch环境(GPU版)

   4.1 两种Pytorch区别(看是否支持GPU)

   4.2 CUDA安装

   4.3 Pytorch配置教程(GPU版)

5 配置代码编辑器

   5.1 代码编辑器区别

   5.2 VScode编辑器

   5.3 Pycharm编辑器

   5.4 JupyterNotebook编辑器

注:以上为本篇内容,小编能力有,如有不恰之处,请多多指正~

6 故障诊断代码示例 (重中之重

   6.1 代码介绍

   6.2 检验环境

   6.3 故障诊断实战代码

1 引言

在学习故障诊断相关代码时,拥有一个强大且灵活的开发环境是至关重要的。Anaconda和Pytorch正是这样的工具,它们为我们提供了一个完整的生态系统,用于进行数据分析、模型训练和部署,是目前常用的工具软件资源。
虽然网上Anaconda及Pytorch安装教程资源比较丰富,但对一些细节部分,比如在安装GPU版本的Pytorch时,是否需要安装CUDA、以及如何查看CUDA版本等问题上仍存在一些歧义。本文将用通俗易懂的语言及方法带大家了解这些概念,并选择自己最合适的方法。此外,本文提供了下载GPU版Pytorch的快捷方式,以及通俗易懂的视频教程链接,为读者朋友们在安装过程中尽可能带来更多的便利。
本期第2篇、第3篇提供了故障诊断实例以及学习代码的必备基础知识,代码包含数据处理,1DCNN模型搭建,模型训练,以及模型评估等故障诊断完整过程,为读者朋友们提供了基本的代码框架
总的来说,本期文章旨在为初学者及入门小白提供一个全面的指南,第1篇科普一些基本概念的同时,提供详细操作过程,帮助大家安装和配置Anaconda环境,以及在该环境中配置Pytorch(包含CPU和GPU两种版本)。此外,本期第2篇、第3篇还带大家学习一个完整故障诊断代码示例深入学习故障诊断代码的各个框架,为接下来学习打下夯实的基础。无论您是在寻找一个全新的开发环境,还是希望优化现有的工作流程,本期文章都将为您提供必要的指导和资源。

2 安装Anaconda

2.1 Anaconda介绍

Anaconda是一个流行的开源Python配置环境集 合,它包含了大量的科学计算、数据分析和机器学习库。它通过Conda包管理器简化了环境管理和依赖关系,使得安装、运行和更新软件包变得异常简单。Anaconda的另一个显著特点是它提供了一个集成的IDE(集成开发环境),即AnacondaNavigator,这使得项目管理和工具集成变得更加直观。

总的来说,不同故障代码的所需环境有可能不同,而使用Anaconda可以直接管理项目环境,特别适用于小白新手用于搭建所需的不同环境。

2.2 Anaconda安装教

2.2.1 下载

1)官网下载


网站:https://www.anaconda.com/download


图1 Anaconda官网

2) 文末获取

点击文末阅读原文,您将获得Anaconda安装包、清华镜像源文件,代码编辑器等本期文章涉及的相关文件。

2.2.2 安

1) 双击程序管理员运行

               图2 Anaconda安装步骤1

2) 点击Next

图3 Anaconda安装步骤2

3) 点击同意

图4 Anaconda安装步骤3

4)选择合适存储位置

图5 Anaconda安装步骤4

5)选择全部选项

图6 Anaconda安装步骤5

6)点击Next

图7 Anaconda安装步骤6

7)点击Next

图8 Anaconda安装步骤7

8) 取消全部选项,点击Finish

图9 Anaconda安装步骤8

2.2.3 配置环境

1)设置里选择系统

图10 配置步骤1

2)选择高级系统设置


图11 配置步骤2

3) 环境变量

图12 配置步骤3

4) 清除之前的环境路径

分别连续单击两下 Path 第一步、第二步,看自己的环境变量路径中是否Pythonanaconda\Scriptanaconda\Library\bin 等关于 Python 和 anaconda 的路径,如果有的话直接删除。

5) 新建路径

在系统变量中点击Path,点击新建,然后点击浏览,找到之前Anaconda安装文件(D:\Software\Anaconda\Anaconda)中Scripts文件,生成一条环境变量。

继续点击新建,浏览,找到之前Anaconda安装文件(D:\Software\Anaconda\Anaconda)中的bin文件生成一条环境变量。

图13 配置步骤4

6) 完成配置,一步一步点击确定退出即可。

7) 检验环境变量是否配置成功

Win+R后输入cmd,管理员运行进入命令提示符,然后命令输入


conda --version

图14 配置步骤5

如果输出conda 24.1.2之类的就说明环境变量设置成功了。

3 配置Pytorch环境(CPU版)

3.1 Pytorch介绍

Pytorch是一个开源的机器学习库,由Facebook的AI研究团队开发。它以其动态计算图和易用性而闻名,特别适合于研究和快速原型开发,也是故障诊断代码常用的框架之一。Pytorch提供了两个版本:CPU版和GPU版。GPU版可以显著加速深度学习模型的训练和推理过程,但需要相应的硬件支持和CUDA环境。

在安装GPU版的Pytorch时,网上对CUDA的安装众口不一,经过小编查询如果只用Pytorch框架,可以不安装CUDA,安装GPU版的Pytorch会自带cuda,如果使用tensorflow框架则需安装CUDA,具体讲解链接如下。



https://docs.infini-ai.com/posts/where-is-cuda.htmlhttps://blog.csdn.net/m0_61141741/article/details/134710343

本章节首先介绍CPU版Pytorch安装,CPU版安装具有操作简单,速度快的特点,适合所有电脑安装,特别是没有独显的电脑。

3.2 Pytorch配置教程(CPU版)

3.2.1 常见Anaconda相关指令























#查看 python 环境conda env list#安装 python 环境conda create -n python311 python=3.11# 卸载 python 环境conda remove -n python311 --all#激活环境activate python311#安装第三方包pip install numpy#卸载第三方pip uninstall numpy# 列出当前环境下的所有库 conda list # 安装NumPy库,并指定版本1.21.5 pip install numpy==1.21.5 -i https://pypi.tuna.tsinghua.edu.cn/simple # 安装Pandas库,并指定版本1.2.4pip install Pandas==1.2.4 -i https://pypi.tuna.tsinghua.edu.cn/simple# 查看当前环境下某个库的版本(以numpy为例) pip show numpy # 退出虚拟环境 conda deactivate

3.2.2 安装教程

1) Win+R后输入cmd,管理员运行进入命令提示符。

2) 创建名为“环境名”的虚拟环境,并指定Python的版本。 


conda create -n python311 python=3.11

图15 创建环境名

3) 进入名为“环境名”的虚拟环境 


 conda activate python311

4) 安装Python第三方库

在安装第三方库时,清华镜像源在国内服务器上提供了高速稳定的服务,这样可以加快安装第三方库的速度,并且在访问时更加稳定可靠。对于我们批量安装第三方库,相当于开了一个加速器,所以第一步要按照下面教程配好镜像源,然后按教程批量安装即可。

a.点击文末阅读原文获得所需文件

b.配置文件

首先打开打开 C:\用户\你的电脑管理员名称文件(是自己的 用户名称 文件夹,不是公共,也不是Default),然后在此文件夹里面新建一个文件夹名称为 pip,把下载好的 pip.ini 文件 放进 pip 文件夹中即可,如下图所示。

图16 配置Pip步骤1

图17 配置Pip步骤2

图18 配置Pip步骤3

这样就配置好了清华镜像源,以后 pip命令下载第三方库的时候,就不需要每次都手动 添加镜像源命令了。

5)批量安装

把Pip.txt文件下载到自己电脑上,比如现在的文件位于D:\Software\ Anaconda目录下面。首先,Win+R后输入cmd,管理员运行进入命令提示符,输入


activate DL

激活Anaconda管理的Python环境,然后输入:


d:

定位到D盘,接着输入:


cd Software\Anaconda

定位到Pip.txt文件下。

图19 批量安装步骤1

最后,输入安装命令,进行批量安装。


pip install -r Pip.txt

图20 批量安装步骤2

6) 安装其他库

上述文件覆盖了绝大多数库,如果需要安装其他库,则直接管理员运行命令提示符,然后激活环境,输入相应指令即可完成安装需要的库。

此时,CPU版本的环境已经搭建完毕,可以运行相关代码开始故障诊断学习之旅。

4 配置Pytorch环境(GPU版)

 4.1 两种Pytorch区别(看是否支持GPU)

     Pytorch提供了两个版本:CPU版和GPU版。GPU版可以显著加速深度学习模型的训练和推理过程,但需要相应的硬件支持和CUDA环境。对计算机而言,中央处理器CPU是主板上的芯片,图形处理器GPU是显卡 上的芯片。每台计算机必有主板,但少数计算机可能没有显卡。目前显卡有三家厂商:Intel、Nvidia、AMD。深度学习所需要的显卡是Nvidia, 没有此显卡的同学无法进行GPU加速。查看自己的计算机的显卡的方法是:任务管理器——性能——左侧栏划到最下面。

图21 查看显卡

如图所示,CPU下方是Nvidia,由此支持GPU版本的Pytorch。

 4.2 CUDA安装

NVIDIA 显卡中的运算平台是CUDA,即使计算机有NVIDIA显卡,但显卡中也不一定含有CUDA,没有的话就要下载CUDA。而Pytorch 的下载组件里也会包含一个内置的cuda,所以如果仅使用Pytorch,也可以不下载CUDA。

对于CUDA查看指令,网上也众口不一,通过查询资料,小编找到相对可信的代码查看指令,首先输入Win+R后输入cmd,进入命令提示符,输入


nvcc -V

查看安装版本。如果显示“nvcc -V不是内部或外部命令”,则说明需要安装CUDA。接着输入


nvidia-smi

查看支持的CUDA版本。

图22 查看CUDA版本

4.2.1 CUDA下载

1)官网下载

CUDA的下载链接:https://developer.nvidia.com/cuda-toolkit-archive

图23 CUDA下载网站

2) 文末获取

4.2.2 CUDA安装

1)下载好之后,点击exe文件,选择临时的解压文件夹。

图24 CUDA安装步骤1

2)解压好后,进入如下图安装界面,同意并继续。

图25 CUDA安装步骤2

3)点击“自定义”

图26 CUDA安装步骤3

4)仅仅选择CUDA选项,并取消CUDA中关于VS的选项。

图27 CUDA安装步骤4

5)完成后,按照默认的C盘路径进行安装。

图28 CUDA安装步骤5

6)安装结束

图29 CUDA安装步骤6

7) 输入nvcc -V查看安装版本

图30 CUDA安装步骤7

4.3 Pytorch配置教程(GPU版)

4.3.1 创建虚拟环境

1) Win+R后输入cmd,管理员运行进入命令提示符。

2) 创建名为“环境名”的虚拟环境,并指定Python的版本。 

 conda create -n 环境名 python=3.11

图31 创建环境

3) 进入名为“环境名”的虚拟环境 


conda activate DL311

4) 安装Pytorch库

进Pytorch官网:PyTorch,根据己电脑情况选择合适的Pytorch安装包。

图32 获取安装命令

       复 制下方代码,并在DL311环境下运行。


pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121


5)安装其他库时,可以安装CPU方法直接安装。

5 配置代码编辑器

5.1 代码编辑器

代码编辑器是用于编写、编辑和运行代码的工具。它们通常提供了代码高亮、自动补全、代码调试、版本控制集成等功能,以提高开发效率和代码质量。

1) Jupyter Notebook

用途:主要用于数据分析、科学计算和机器学习领域,支持交互式编程,可以方便地展示代码、计算结果、可视化图表和文档。

特点:支持多种编程语言(主要是Python),允许将代码、输出结果和解释性文本整合在一个文档中,便于分享。

2) Visual Studio Code (VSCode)

用途:是一个轻量级但功能强大的源代码编辑器,支持多种编程语言,包括Python、JavaScript、C++等。

特点:提供了丰富的插件生态系统,可以扩展其功能。它支持代码调试、版本控制集成(如Git)、代码高亮和自动补全等。

3) PyCharm

用途:是一个专为Python开发的集成开发环境(IDE),提供了许多针对Python开发的特性。

特点:提供了代码分析、智能代码补全、项目结构导航、版本控制集成等功能。PyCharm有两个版本:免费的Community Edition和付费的Professional Edition,后者提供了更多高级功能,如Web开发和数据库支持。

5.1.1 编辑器区别

交互性:Jupyter Notebook以其交互性著称,适合于快速迭代和数据探索。VSCode和PyCharm则更侧重于完整的开发周期,包括代码编写、调试和版本控制。

语言支持:Jupyter Notebook主要支持Python,而VSCode和PyCharm支持多种编程语言。

集成度:PyCharm作为一个IDE,提供了更完整的集成开发环境,包括项目管理、调试和测试工具。VSCode虽然是一个编辑器,但通过插件也可以实现类似的功能。

用户界面:Jupyter Notebook的界面更倾向于文档和笔记本风格,而VSCode和PyCharm则提供了更传统的代码编辑器界面。

性能:对于大型项目,VSCode和PyCharm可能在性能上更优,因为它们对大型文件和复杂项目结构有更好的优化。

社区和插件:VSCode拥有一个非常活跃的社区和大量的插件,这使得它在功能上非常灵活和强大。

5.2 VScode编辑器安装

1)官网下载安装包(文末也提供安装包)

Visual Studio Code - Code Editing. Redefined

2)双击安装

图33 VScode安装步骤1

3) 选择安装地址

图34 VScode安装步骤2

4)选择附加任务

图35 VScode安装步骤3

5)安装汉化插件

图36 安装汉化插件

6)安装Jupyter插件

图37 安装Jupyter插件

7)安装Python插件

图38 安装Python插件

5.3 Pycharm编辑器

5.3.1 Pycharm安装

Pycharm安装教程,往期已发布。具体如下链接,本期在这里只讲如何加入我们所创的Python环境。

初学者必看 | Python及PyCharm安装教程

1) 打开Pycharm,点击文件,选择设置。

图39 Pycharm添加环境步骤1

2)点击项目:Pycharm代码,选择Python解释器。

点击齿轮,选择添加。

图40 Pycharm添加环境步骤2

3)点击conda环境,选择现有环境,添加所需环

境。


图41 Pycharm添加环境步骤3

4) 安装完成

图42 配置完成

5.4 JupyterNotebook编辑器

Anaconda附带了数据分析常用的Jupyter Notebook,之前被称为 IPython notebook,是一个交互式笔记本。Jupyter Notebook 的本质是一个 Web应用程序,可以将代码、图像和文档全部组合到一个web文档中,便于创建和共享程序文档,支持实时代码,数学方程,可视化和markdown,在数据清理和转换,数据分析,统计建模,机器学习等方面应用广泛。具体使用过程,之前的文章有教学,这里不再赘述,小编推荐使用前两个编码器,而且二选一即可,如果对JupyterNotebook感兴趣,可以点击下方链接。

基于Anaconda的Python及jupyter notebook编辑器的安装教程

注:由于文章篇幅有限,代码部分见下一期内容,大家先根据步骤安装相应软件,下期内容首先带大家用代码检验自己环境Pytorch是否支持GPU加速,然后用安装的环境分别跑一个入门代码,学习故障诊断及深度学习基础知识,最后比较一下速度。

注:上述相关安装可参考以下视频链接

【Python深度学习:安装Anaconda、Pytorch(GPU版)库与PyCharm】https://www.bilibili.com/video/BV1cD4y1H7Tk?vd_source=cae3d8d89802cd2ce396a8215379c3ca


编辑:赵栓栓

校核:李正平、陈凯歌、曹希铭、赵学功、白亮、王金、陈莹洁、陈宇航、任超、海洋、Tina

该文资料搜集自网络,仅用作学术分享,不做商业用途,若侵权,后台联系小编进行删除

点击左下角阅读原文,即可在线阅读论文。

 


来源:故障诊断与python学习

附件

免费附件.txt
ACT航空python芯片海洋UM电机科普数字孪生控制数控Unity
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-01-11
最近编辑:1月前
故障诊断与python学习
硕士 签名征集中
获赞 77粉丝 81文章 169课程 0
点赞
收藏
作者推荐

信号处理代码实战 | 阶次分析,(附开源代码与实验数据)

本文分享阶次分析代码。阶次基本介绍等时间采样无法对变转速设备进行故障分析,由于转速的变化,导致在等时间采样的情况下,无法采集到同相位的点,所以直接进行FFT转换后,信号往往会出现非常大的泄露,如图1所示。图1 等时间采样频谱阶次分析首先要确定参考轴的旋转频率。假设参考轴的转速为 ,则其旋转频率 。某一振动信号的频率为 (除去固有频率之外,其他频率均会随着转速的变化而等比例变化),那么该振动信号对应的阶次 ,所以无论转速如何变化,故障阶次始终不会改变。实现阶次谱存在两个关键步骤:(1).插值获取等角度间隔的时间点(2).使用等角度间隔的时间点对振动信号重采样得到等角度间隔的振动信号最后只需对重采样的振动信号FFT变换,即可得到阶次谱。需要注意角采样频率 仍需满足奈奎斯特采样定理,大于等于最大阶次2.56倍,阶次谱中最大阶次则为 。案例数据介绍采用渥太华升速轴承内圈损伤数据,数据为.mat数据,包含两类数据振动信号(Channel_1)和脉冲信号(Channel_2),采样频率200000,每圈脉冲数1024,内圈故障阶次5.43。实现过程讲解读取原始振动数据与转速脉冲(局部放大),如图2、图3。图2 原始数据图3 转速脉冲2.根据转速脉冲计算转频时间曲线如图4,对给定时间内求取旋转角度的累积变化量如图5。图4 转频时间曲线图5 角度时间曲线3.使用上述获取到的角度以及时间创建一个插值函数(python中使用interp1d实现),将角度进行等间隔划分并带入,即可获取到等角度间隔的时间点。使用原始振动数据和时间再次创建一个插值函数,将等角度间隔的时间点带入,即可获取到等角度间隔采样的振动信号,如图6。图6 重采样振动信号4.对重采样的振动信号进行FFT转换,得到阶次谱如图7(进行局部放大),但是故障阶次不够明显,进行包络解调得到包络阶次谱如图8(进行局部放大),此时故障阶次5.43非常明显。图7 阶次谱图8 阶次包络谱代码import numpy as npfrom scipy.interpolate import interp1dimport matplotlib.pyplot as pltfrom scipy.fftpack import fftfrom scipy.integrate import cumulative_trapezoid, trapezoidfrom scipy.fftpack import hilbert, fft, ifftfrom matplotlib.pylab import mplfrom scipy import fftpackimport pandas as pdimport scipympl.rcParams['font.sans-serif'] = ['SimHei']mpl.rcParams['axes.unicode_minus'] = Falsedef trend_remove(x, y): # 用2次多项式拟合x,y数组,返回多项式系数 param = np.polyfit(x, y, 2) # 拟合完之后,用生成的多项式系数用来生成多项式函数 y_poly_func = np.poly1d(param) # 生成多项式函数之后,就是获取x在这个多项式处的值 y_poly = y_poly_func(x) # 原始信号减去拟合函数的值即为去除趋势项后的信号 de_trend_y = y - y_poly return de_trend_yfile = r'C:\Users\Deng\Desktop\新建文件夹 (2)\I-A-1.mat'dataset = scipy.io.loadmat(file)vib = np.array([i[0] for i in dataset['Channel_1']])pulse = np.array([i[0] for i in dataset['Channel_2']])fs = 200000t = (1 / fs) * np.arange(0, len(vib))# 振动信号去除趋势项vib = trend_remove(t, vib)# 转速计算:SpeedFrePulseTime = []for i in range(len(pulse)-1): if pulse[i + 1] < 2 < pulse[i]: PulseTime.append(t[i])PulseTime = np.array(PulseTime)SpeedFre = []speedTime = []for i in range(0, len(PulseTime) + 1, 1024): if i == 0: SpeedFre.append(0) else: Fre = 1 / (PulseTime[i] - PulseTime[i - 1024]) SpeedFre.append(Fre) speedTime.append(PulseTime[i])SpeedFre = np.array(SpeedFre)SpeedFre = SpeedFre[1:]PulseTime = PulseTime[1:]# 积分求取转过的总角度AngleAngle = cumulative_trapezoid(SpeedFre*360, speedTime, initial=0)plt.figure(figsize=(11, 4))plt.plot(speedTime, SpeedFre)plt.title('转速')plt.xlabel('时间')plt.ylabel('hz')plt.figure(figsize=(11, 4))plt.plot(speedTime, SpeedFre*360)plt.title('角度')plt.xlabel('时间')plt.tight_layout()plt.show()# 获取等角度间隔的时间点:EqualAngleTimeangleStep = 0.1EqualAngle = np.arange(0, trapezoid(SpeedFre*360, speedTime), angleStep)FunctionA = interp1d(Angle, speedTime)EqualAngleTime = FunctionA(EqualAngle)# 用等角度间隔的时间点对振动信号重新采样,得到了等角度间隔的振动信号:EqualAngleVibFunctionV = interp1d(t, vib)EqualAngleVib = FunctionV(EqualAngleTime)# 对重采样信后进行fft变换VibFft = (np.abs(fft(EqualAngleVib)) * 2) / len(EqualAngleVib)VibFftHalf = VibFft[1:int(np.round(len(EqualAngleVib) / 2))]order = np.arange(0, len(EqualAngleVib), dtype='int64') * (1/angleStep*360) / len(EqualAngleVib)orderHalf = order[1:int(np.round(len(EqualAngleVib) / 2))]plt.figure(figsize=(11, 4))plt.plot(EqualAngle, EqualAngleVib)plt.title('重采样之后的振动信号')plt.xlabel('角度')plt.ylabel('振动幅值')plt.figure(figsize=(11, 4))plt.plot(orderHalf, VibFftHalf)plt.title('阶次谱')plt.xlabel('阶次')plt.ylabel('振动幅值')plt.xlim(0, 100)plt.show()angleFs = (1/angleStep)*360orderMin = 1orderMax = 500# 带通滤波后逆变换signal_fft = fftpack.fft(EqualAngleVib)sig_fre = fftpack.fftfreq(n=len(signal_fft), d=1 / angleFs)signal_fft[(abs(sig_fre) < orderMin) | (abs(sig_fre) > orderMax)] = 0signal_filter = fftpack.ifft(signal_fft).real# 包络变换H = np.abs(hilbert(signal_filter) - np.mean(signal_filter))HP = np.abs(fft(H - np.mean(H))) * 2 / len(EqualAngleVib)HP_half = HP[1:int(np.round(len(EqualAngleVib) / 2))]plt.figure(figsize=(11, 4))plt.plot(orderHalf, HP_half)plt.title('阶次包络谱')plt.xlabel('阶次')plt.ylabel('振动幅值')plt.xlim(0, 100)plt.show() 编辑:海洋校核:李正平、陈凯歌、赵栓栓、曹希铭、赵学功、白亮、任超、陈宇航、Tina、王金、陈莹洁该文资料搜集自网络,仅用作学术分享,不做商业用途,若侵权,后台联系小编进行删除来源:故障诊断与python学习

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈