使用Numpy进行数组操作和运算

发布时间: 2023-12-20 12:27:03 阅读量: 50 订阅数: 42
# 1. 介绍Numpy ## 1.1 Numpy的概述 Numpy(Numerical Python)是一个高性能的科学计算库,主要用于处理多维数组和矩阵的运算。它是Python生态系统中的一个重要组成部分,提供了丰富的数学、科学和工程计算功能。 Numpy具有以下特点: - 强大的多维数组对象:Numpy提供了多维数组对象(ndarray),可以在数组上执行快速、高效的数值运算。 - 高效的数值计算:Numpy底层使用C语言实现,因此具有优化的数值计算能力。同时,Numpy还支持使用多核CPU进行并行计算。 - 丰富的数学函数库:Numpy内置了很多数学函数,涵盖了基本的数学运算、线性代数运算、傅里叶变换、随机数生成等功能。 - 与其他科学计算库的整合:Numpy与Scipy、Matplotlib等科学计算库紧密结合,可以方便地进行科学计算、数据分析和可视化。 ## 1.2 安装Numpy 在使用Numpy之前,需要先安装Numpy库。可以通过以下简单的命令在Python环境中安装Numpy: ``` pip install numpy ``` ## 1.3 创建Numpy数组 在Numpy中,最基本的对象就是Numpy数组(ndarray)。Numpy数组是一个由相同类型的元素组成的多维数据结构。我们可以使用Numpy提供的函数来创建数组,例如: ```python import numpy as np # 创建一维数组 a = np.array([1, 2, 3, 4, 5]) print(a) # 输出:[1 2 3 4 5] # 创建二维数组 b = np.array([[1, 2, 3], [4, 5, 6]]) print(b) # 输出: # [[1 2 3] # [4 5 6]] # 创建全零数组 c = np.zeros((2, 3)) print(c) # 输出: # [[0. 0. 0.] # [0. 0. 0.]] # 创建全一数组 d = np.ones((3, 2)) print(d) # 输出: # [[1. 1.] # [1. 1.] # [1. 1.]] ``` 通过以上代码,我们可以看到如何创建不同维度和形状的Numpy数组。使用`np.array()`函数可以直接将Python的列表或元组转换为Numpy数组。`np.zeros()`函数可以创建全零数组,`np.ones()`函数可以创建全一数组。 接下来,我们将继续介绍Numpy数组的操作和运算方法。 # 2. Numpy数组操作 Numpy是一个Python库,用于进行高效的科学计算。它提供了强大的多维数组对象和相应的操作函数,是大多数数字计算任务的基础。在本章中,我们将探讨如何使用Numpy进行数组操作,包括索引和切片、数组形状操作、数组拼接和分裂等。 ### 2.1 数组索引和切片 Numpy数组的索引和切片操作与Python的列表类似,但更加强大和灵活。下面是一些常用的索引和切片操作示例: ```python import numpy as np # 创建一个一维数组 a = np.array([1, 2, 3, 4, 5]) # 根据索引获取数组元素 print(a[0]) # 输出:1 # 切片操作 print(a[1:4]) # 输出:[2 3 4] # 创建一个二维数组 b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 获取特定行和列的元素 print(b[1, 2]) # 输出:6 # 切片操作 print(b[:2, 1:]) # 输出:[[2 3] [5 6]] ``` 在上面的代码中,我们首先创建了一个一维数组`a`和一个二维数组`b`。然后使用索引和切片操作获取数组中的元素。需要注意的是,Numpy的索引从0开始,而且切片操作是左闭右开的。 ### 2.2 数组形状操作 Numpy提供了多种方式来操作数组的形状,包括改变维度、转置、扁平化等。下面是一些常用的形状操作示例: ```python import numpy as np # 创建一个二维数组 a = np.array([[1, 2, 3], [4, 5, 6]]) # 获取数组的形状 print(a.shape) # 输出:(2, 3) # 改变数组的形状 b = a.reshape((3, 2)) print(b) # 输出:[[1 2] [3 4] [5 6]] # 转置数组 c = a.T print(c) # 输出:[[1 4] [2 5] [3 6]] # 扁平化数组 d = a.flatten() print(d) # 输出:[1 2 3 4 5 6] ``` 在上面的代码中,我们首先创建了一个二维数组`a`。然后使用`shape`属性获取数组的形状,并使用`reshape`函数改变数组的形状。另外,我们还可以使用`T`属性对数组进行转置操作,以及使用`flatten`函数将多维数组扁平化为一维数组。 ### 2.3 数组拼接和分裂 Numpy提供了方便的函数来进行数组的拼接和分裂操作。下面是一些常用的拼接和分裂示例: ```python import numpy as np # 创建两个一维数组 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 拼接数组 c = np.concatenate((a, b)) print(c) # 输出:[1 2 3 4 5 6] # 创建一个二维数组 d = np.array([[1, 2], [3, 4]]) e = np.array([[5, 6]]) # 拼接数组 f = np.concatenate((d, e), axis=0) print(f) # 输出:[[1 2] [3 4] [5 6]] # 分裂数组 g, h = np.split(f, 2, axis=0) print(g) # 输出:[[1 2] [3 4]] print(h) # 输出:[[5 6]] ``` 在上面的代码中,我们首先创建了一些数组`a`、`b`、`d`和`e`。然后使用`concatenate`函数进行数组的拼接操作,可以指定拼接的轴(默认为0)。另外,使用`split`函数进行数组的分裂操作,可以指定分裂的位置和轴。 以上是Numpy数组操作的基本内容,我们已经介绍了数组索引和切片、数组形状操作、数组拼接和分裂等。在接下来的章节中,我们将探讨更多关于Numpy的数组计算和高级数组操作。 # 3. Numpy数组计算 在使用Numpy进行数组操作时,我们经常需要对数组进行各种数学运算、统计运算和广播操作。本章将介绍如何使用Numpy进行这些常见的数组计算。 #### 3.1 数学运算 Numpy提供了大量的数学运算函数,使得对数组进行数学计算变得非常简单。下面是一些常用的数学运算函数示例: ```python import numpy as np # 数组加法 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.add(a, b) print("数组加法结果:", c) # 数组减法 d = np.subtract(a, b) print("数组减法结果:", d) # 数组乘法 e = np.multiply(a, b) print("数组乘法结果:", e) # 数组除法 f = np.divide(a, b) print("数组除法结果:", f) # 数组平方 g = np.square(a) print("数组平方结果:", g) # 数组开根号 h = np.sqrt(a) print("数组开根号结果:", h) # 数组求和 i = np.sum(a) print("数组求和结果:", i) # 数组求平均值 j = np.mean(a) print("数组求平均值结果:", j) ``` 上述代码中,我们使用了Numpy的add、subtract、multiply、divide、square、sqrt、sum和mean等函数进行了不同类型的数学运算,通过调用这些函数可以方便地进行数组运算。 #### 3.2 统计运算 除了常见的数学运算,Numpy还提供了丰富的统计运算功能。下面是一些常用的统计运算函数示例: ```python import numpy as np # 最大值 a = np.array([1, 2, 3, 4, 5]) b = np.max(a) print("最大值:", b) # 最小值 c = np.min(a) print("最小值:", c) # 求和 d = np.sum(a) print("求和:", d) # 平均值 e = np.mean(a) print("平均值:", e) # 标准差 f = np.std(a) print("标准差:", f) # 方差 g = np.var(a) print("方差:", g) # 中位数 h = np.median(a) print("中位数:", h) ``` 上述代码中,我们使用了Numpy的max、min、sum、mean、std、var和median等函数进行了不同类型的统计运算,通过调用这些函数可以方便地对数组进行统计分析。 #### 3.3 广播操作 广播是Numpy中一种重要的特性,它使得对不同形状的数组进行计算变得简单高效。下面是一个广播操作的例子: ```python import numpy as np # 广播操作 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = a + b print("广播操作结果:", c) ``` 在上述代码中,我们对形状不同的两个数组a和b进行了相加操作,Numpy会自动进行广播,将数组a和b扩展为相同的形状后再进行相加,得到了最终的计算结果。 在使用广播操作时,需要遵循一定的规则: - 维数不同的数组通过在前面插入新的维度进行扩展,直到维数相同。 - 数组的形状在某个维度上的长度为1,或者在该维度上不存在,都可以进行广播。 - 广播后的数组形状为每个维度上的最大长度。 这样,我们就可以利用Numpy的广播功能对不同形状的数组进行类似于向量化的计算,极大地提高了数组操作的效率。 这一章介绍了Numpy的数组计算功能,包括数学运算、统计运算和广播操作。通过合理运用这些功能,我们可以快速高效地进行复杂的数组计算任务。 # 4. Numpy高级数组操作 在本章中,我们将深入学习Numpy库中的高级数组操作,包括线性代数运算、排序和搜索、唯一化和集合逻辑等内容。通过本章的学习,你将能够更好地运用Numpy库处理各种复杂的数组操作。 #### 4.1 线性代数运算 Numpy库提供了丰富的线性代数运算功能,可以进行矩阵乘法、求解线性方程组、特征值分解等操作。在本节中,我们将学习如何使用Numpy库进行常见的线性代数运算,并了解其在实际应用中的重要性。 #### 4.2 排序和搜索 在实际数据处理中,经常需要对数组进行排序或者进行搜索操作。Numpy库提供了多种排序和搜索的函数,可以方便快速地对数组进行操作。在本节中,我们将学习如何使用Numpy库进行排序和搜索,并掌握其使用技巧。 #### 4.3 唯一化和集合逻辑 Numpy库提供了一些函数来对数组进行唯一化处理,或者进行集合逻辑操作,如并集、交集、差集等。在本节中,我们将深入学习这些函数的用法,并结合实际场景进行案例分析,以便更好地掌握其使用方法。 通过本章的学习,我们将对Numpy库中的高级数组操作有更深入的理解,为实际应用提供更多可能性和灵活性。 希望本章的内容能够帮助你更好地运用Numpy库进行高级数组操作! # 5. Numpy性能优化 Numpy是用于科学计算和数据分析的重要工具,它提供了高效的数组操作和计算功能。然而,在处理大规模数据时,优化代码的性能变得尤为重要。本章将介绍一些Numpy性能优化的技巧,帮助你提高计算效率和避免潜在的性能瓶颈。 ### 5.1 向量化操作 向量化操作是指使用Numpy的函数来替代使用Python循环迭代对数组进行操作,这种方式可以极大地提高计算效率。以下是一些常用的向量化操作示例: ```python import numpy as np # 计算向量的平方根 arr = np.array([1, 2, 3, 4, 5]) result = np.sqrt(arr) print(result) # 输出: [1. 1.41421356 1.73205081 2. 2.23606798] # 计算数组的元素和 arr = np.array([1, 2, 3, 4, 5]) result = np.sum(arr) print(result) # 输出: 15 # 对数组进行逻辑运算 arr1 = np.array([True, True, False, False]) arr2 = np.array([False, True, False, True]) result = np.logical_and(arr1, arr2) print(result) # 输出: [False True False False] ``` 通过使用向量化操作,可以大大减少Python循环的使用,从而提高计算效率。 ### 5.2 内存布局和速度优化技巧 内存布局和数据存储方式对于Numpy计算性能也有着重要影响。以下是一些内存布局和速度优化的技巧: - 尽量使用连续存储的数组:Numpy数组在计算中可以利用连续存储的特性提高访问速度,因此在创建数组时,尽量使用连续的内存空间。 - 避免拷贝数组:在对数组进行操作时,尽量避免创建拷贝数组,可以使用`np.view`来创建一个新的数组视图,而不是创建一个完全独立的副本。 - 使用原地操作:对于一些简单的计算操作,尽量使用原地操作,即直接在原始数组上进行修改,而不是创建新的数组。 ```python import numpy as np # 创建连续存储的数组 arr = np.arange(1000000) print(arr.flags) # 输出: C_CONTIGUOUS : True # 创建数组视图 arr1 = np.arange(10) arr2 = arr1.view() print(arr2.base is arr1) # 输出: True # 原地操作 arr = np.array([1, 2, 3, 4, 5]) arr += 1 print(arr) # 输出: [2 3 4 5 6] ``` ### 5.3 并行计算和多核处理 在处理大规模数据时,使用并行计算和多核处理技术可以有效加速计算过程。Numpy提供了一些方法来利用多核处理器进行并行计算。 ```python import numpy as np # 设置Numpy使用多核处理器 np.seterr(all='ignore') np.seterr(all='warn') # 并行计算 arr1 = np.random.rand(100000) arr2 = np.random.rand(100000) result = np.add(arr1, arr2) print(result) ``` 通过使用并行计算,Numpy可以充分利用多核处理器的性能,进一步提升计算效率。 本章介绍了Numpy性能优化的一些技巧,包括向量化操作、内存布局和速度优化、并行计算和多核处理等。合理运用这些技巧可以提高Numpy的计算效率,尤其在处理大规模数据时十分重要。 # 6. 应用实例 ### 6.1 数学建模 在科学和工程领域,Numpy的功能在数学建模中非常有用。我们可以使用Numpy来解决各种数学问题,例如求解线性方程组,优化问题,微分方程等。下面是一个简单的线性回归模型的例子: ```python import numpy as np # 生成随机数据 np.random.seed(0) X = np.random.rand(100, 1) y = 2 + 3 * X + np.random.rand(100, 1) # 添加偏置项 X_b = np.c_[np.ones((100, 1)), X] # 使用正规方程求解 theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) # 输出结果 print("Theta best:", theta_best) ``` 代码解释: 1. 通过生成随机数据,我们创建了一个简单的线性回归问题。 2. 使用`np.c_`函数添加一个偏置项(截距项)到X矩阵中。 3. 使用正规方程求解线性回归模型的参数。 4. 打印输出结果。 结果解释: 代码执行后,我们得到了线性回归模型的参数。在这个例子中,我们生成的随机数据是基于方程`y = 2 + 3x + 噪音`,因此我们期望得到的参数为`θ0 = 2`和`θ1 = 3`。实际上,由于加入了噪音,求解得到的参数会略有偏差。 ### 6.2 数据处理 Numpy在处理大量数据时非常高效,并提供了很多方便的函数来处理和操作数据。下面是一个简单的示例,演示如何使用Numpy进行数据处理: ```python import numpy as np # 加载数据 data = np.loadtxt('data.txt', delimiter=',') # 计算均值和标准差 mean = np.mean(data) std = np.std(data) # 归一化处理 normalized_data = (data - mean) / std # 保存结果 np.save('normalized_data.npy', normalized_data) ``` 代码解释: 1. 我们使用`np.loadtxt`函数从文件中加载数据。假设数据是以逗号分隔的,存储在`data.txt`文件中。 2. 使用`np.mean`和`np.std`函数计算数据的均值和标准差。 3. 将数据归一化处理,通过减去均值并除以标准差。 4. 使用`np.save`函数保存处理后的数据到`normalized_data.npy`文件。 结果解释: 代码执行后,我们得到了经过归一化处理的数据,并保存到了文件中。归一化后的数据具有零均值和单位方差,有助于提高后续的数据分析和模型训练的效果。 ### 6.3 图像处理 Numpy在图像处理中也有广泛的应用。我们可以使用Numpy来读取、修改和保存图像。下面是一个简单的图像反转的例子: ```python import numpy as np import matplotlib.pyplot as plt # 读取图像 image = plt.imread('image.jpg') # 反转图像 inverted_image = 255 - image # 展示结果 plt.subplot(1, 2, 1) plt.imshow(image) plt.title('Original Image') plt.subplot(1, 2, 2) plt.imshow(inverted_image) plt.title('Inverted Image') plt.show() ``` 代码解释: 1. 使用`plt.imread`函数读取图像文件。假设图像文件名为`image.jpg`。 2. 将图像反转,通过将像素值减去255来实现。 3. 使用Matplotlib库展示原始图像和反转后的图像。 结果解释: 代码执行后,我们得到了原始图像和反转后的图像。在反转后的图像中,原本较亮的区域变为暗区,原本较暗的区域变为亮区,从而实现了图像的反转效果。 以上是Numpy在应用实例中的一些简单应用,通过这些示例,我们可以看到Numpy在数学建模、数据处理和图像处理方面的强大功能。
corwn 最低0.47元/天 解锁专栏
买1年送3月
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

勃斯李

大数据技术专家
超过10年工作经验的资深技术专家,曾在一家知名企业担任大数据解决方案高级工程师,负责大数据平台的架构设计和开发工作。后又转战入互联网公司,担任大数据团队的技术负责人,负责整个大数据平台的架构设计、技术选型和团队管理工作。拥有丰富的大数据技术实战经验,在Hadoop、Spark、Flink等大数据技术框架颇有造诣。
专栏简介
本专栏旨在介绍Python数据处理框架及其在实际应用中的技术细节和解决方案。专栏首先从Python数据处理的基础开始,通过文章《Python中的数据处理简介》和《Python数据处理中的基本数据结构》帮助读者了解Python中常用的数据结构和基本操作。随后,我们将深入探讨Python中的函数、模块和异常处理,以便读者能够编写可靠且高效的数据处理代码。接下来,我们将介绍Python中的文件操作和数据格式化工具,帮助读者处理各种文件和数据格式。在此基础上,我们将详细讲解NumPy和Pandas库在数据处理中的功能与应用。此外,我们还将介绍使用Matplotlib和Seaborn进行数据可视化,以及使用Scikit-learn、PyTorch和TensorFlow进行机器学习和深度学习的数据处理应用。最后,我们还将探讨NLP中的数据处理技术和在Python中进行数据清洗与预处理的方法。通过专栏的学习,读者将能够掌握Python数据处理的核心概念和技术,为处理和分析各类数据提供有力支持。
最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

【实时系统空间效率】:确保即时响应的内存管理技巧

![【实时系统空间效率】:确保即时响应的内存管理技巧](https://cdn.educba.com/academy/wp-content/uploads/2024/02/Real-Time-Operating-System.jpg) # 1. 实时系统的内存管理概念 在现代的计算技术中,实时系统凭借其对时间敏感性的要求和对确定性的追求,成为了不可或缺的一部分。实时系统在各个领域中发挥着巨大作用,比如航空航天、医疗设备、工业自动化等。实时系统要求事件的处理能够在确定的时间内完成,这就对系统的设计、实现和资源管理提出了独特的挑战,其中最为核心的是内存管理。 内存管理是操作系统的一个基本组成部

学习率对RNN训练的特殊考虑:循环网络的优化策略

![学习率对RNN训练的特殊考虑:循环网络的优化策略](https://img-blog.csdnimg.cn/20191008175634343.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTYxMTA0NQ==,size_16,color_FFFFFF,t_70) # 1. 循环神经网络(RNN)基础 ## 循环神经网络简介 循环神经网络(RNN)是深度学习领域中处理序列数据的模型之一。由于其内部循环结

极端事件预测:如何构建有效的预测区间

![机器学习-预测区间(Prediction Interval)](https://d3caycb064h6u1.cloudfront.net/wp-content/uploads/2020/02/3-Layers-of-Neural-Network-Prediction-1-e1679054436378.jpg) # 1. 极端事件预测概述 极端事件预测是风险管理、城市规划、保险业、金融市场等领域不可或缺的技术。这些事件通常具有突发性和破坏性,例如自然灾害、金融市场崩盘或恐怖袭击等。准确预测这类事件不仅可挽救生命、保护财产,而且对于制定应对策略和减少损失至关重要。因此,研究人员和专业人士持

Epochs调优的自动化方法

![ Epochs调优的自动化方法](https://img-blog.csdnimg.cn/e6f501b23b43423289ac4f19ec3cac8d.png) # 1. Epochs在机器学习中的重要性 机器学习是一门通过算法来让计算机系统从数据中学习并进行预测和决策的科学。在这一过程中,模型训练是核心步骤之一,而Epochs(迭代周期)是决定模型训练效率和效果的关键参数。理解Epochs的重要性,对于开发高效、准确的机器学习模型至关重要。 在后续章节中,我们将深入探讨Epochs的概念、如何选择合适值以及影响调优的因素,以及如何通过自动化方法和工具来优化Epochs的设置,从而

时间序列分析的置信度应用:预测未来的秘密武器

![时间序列分析的置信度应用:预测未来的秘密武器](https://cdn-news.jin10.com/3ec220e5-ae2d-4e02-807d-1951d29868a5.png) # 1. 时间序列分析的理论基础 在数据科学和统计学中,时间序列分析是研究按照时间顺序排列的数据点集合的过程。通过对时间序列数据的分析,我们可以提取出有价值的信息,揭示数据随时间变化的规律,从而为预测未来趋势和做出决策提供依据。 ## 时间序列的定义 时间序列(Time Series)是一个按照时间顺序排列的观测值序列。这些观测值通常是一个变量在连续时间点的测量结果,可以是每秒的温度记录,每日的股票价

【批量大小与存储引擎】:不同数据库引擎下的优化考量

![【批量大小与存储引擎】:不同数据库引擎下的优化考量](https://opengraph.githubassets.com/af70d77741b46282aede9e523a7ac620fa8f2574f9292af0e2dcdb20f9878fb2/gabfl/pg-batch) # 1. 数据库批量操作的理论基础 数据库是现代信息系统的核心组件,而批量操作作为提升数据库性能的重要手段,对于IT专业人员来说是不可或缺的技能。理解批量操作的理论基础,有助于我们更好地掌握其实践应用,并优化性能。 ## 1.1 批量操作的定义和重要性 批量操作是指在数据库管理中,一次性执行多个数据操作命

【算法竞赛中的复杂度控制】:在有限时间内求解的秘籍

![【算法竞赛中的复杂度控制】:在有限时间内求解的秘籍](https://dzone.com/storage/temp/13833772-contiguous-memory-locations.png) # 1. 算法竞赛中的时间与空间复杂度基础 ## 1.1 理解算法的性能指标 在算法竞赛中,时间复杂度和空间复杂度是衡量算法性能的两个基本指标。时间复杂度描述了算法运行时间随输入规模增长的趋势,而空间复杂度则反映了算法执行过程中所需的存储空间大小。理解这两个概念对优化算法性能至关重要。 ## 1.2 大O表示法的含义与应用 大O表示法是用于描述算法时间复杂度的一种方式。它关注的是算法运行时

【损失函数与随机梯度下降】:探索学习率对损失函数的影响,实现高效模型训练

![【损失函数与随机梯度下降】:探索学习率对损失函数的影响,实现高效模型训练](https://img-blog.csdnimg.cn/20210619170251934.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjc4MDA1,size_16,color_FFFFFF,t_70) # 1. 损失函数与随机梯度下降基础 在机器学习中,损失函数和随机梯度下降(SGD)是核心概念,它们共同决定着模型的训练过程和效果。本

机器学习性能评估:时间复杂度在模型训练与预测中的重要性

![时间复杂度(Time Complexity)](https://ucc.alicdn.com/pic/developer-ecology/a9a3ddd177e14c6896cb674730dd3564.png) # 1. 机器学习性能评估概述 ## 1.1 机器学习的性能评估重要性 机器学习的性能评估是验证模型效果的关键步骤。它不仅帮助我们了解模型在未知数据上的表现,而且对于模型的优化和改进也至关重要。准确的评估可以确保模型的泛化能力,避免过拟合或欠拟合的问题。 ## 1.2 性能评估指标的选择 选择正确的性能评估指标对于不同类型的机器学习任务至关重要。例如,在分类任务中常用的指标有

激活函数理论与实践:从入门到高阶应用的全面教程

![激活函数理论与实践:从入门到高阶应用的全面教程](https://365datascience.com/resources/blog/thumb@1024_23xvejdoz92i-xavier-initialization-11.webp) # 1. 激活函数的基本概念 在神经网络中,激活函数扮演了至关重要的角色,它们是赋予网络学习能力的关键元素。本章将介绍激活函数的基础知识,为后续章节中对具体激活函数的探讨和应用打下坚实的基础。 ## 1.1 激活函数的定义 激活函数是神经网络中用于决定神经元是否被激活的数学函数。通过激活函数,神经网络可以捕捉到输入数据的非线性特征。在多层网络结构