首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | PyTorch:网红中的顶流明星
02 | NumPy(上):核心数据结构详解
03 | NumPy(下):深度学习中的常用操作
04 | Tensor:PyTorch中最基础的计算单元
05 | Tensor变形记:快速掌握Tensor切分、变形等方法
06 | Torchvision(上):数据读取,训练开始的第一步
07 | Torchvision(中):数据增强,让数据更加多样性
08 | Torchvision(下):其他有趣的功能
09 | 卷积(上):如何用卷积为计算机“开天眼”?
10 | 卷积(下):如何用卷积为计算机“开天眼”?
11 | 损失函数:如何帮助模型学会“自省”?
12 | 计算梯度:网络的前向与反向传播
13 | 优化方法:更新模型参数的方法
14 | 构建网络:一站式实现模型搭建与训练
15 | 可视化工具:如何实现训练的可视化监控?
16|分布式训练:如何加速你的模型训练?
17 | 图像分类(上):图像分类原理与图像分类模型
18 | 图像分类(下):如何构建一个图像分类模型?
19 | 图像分割(上):详解图像分割原理与图像分割模型
20 | 图像分割(下):如何构建一个图像分割模型?
21 | NLP基础(上):详解自然语言处理原理与常用算法
22 | NLP基础(下):详解语言模型与注意力机制
23 | 情感分析:如何使用LSTM进行情感分析?
24 | 文本分类:如何使用BERT构建文本分类模型?
25 | 摘要:如何快速实现自动文摘生成?
当前位置:
首页>>
技术小册>>
PyTorch深度学习实战
小册名称:PyTorch深度学习实战
### 02 | NumPy(上):核心数据结构详解 在深度学习与科学计算的广阔领域中,NumPy(Numerical Python)无疑是一座不可或缺的基石。作为Python的一个扩展库,NumPy提供了高性能的多维数组对象以及操作这些数组的工具,使得在Python中处理大规模数值数据变得既快速又简单。本章“NumPy(上):核心数据结构详解”将深入探索NumPy的核心——多维数组(ndarray),理解其基础概念、创建方式、基本属性及操作方法,为后续利用NumPy进行高效数据处理和机器学习模型构建打下坚实基础。 #### 一、NumPy简介与安装 NumPy是Python的一个开源数值计算扩展库,它提供了大量的数学函数库以及对数组的支持,特别是大量的维度数组与矩阵运算能力,此外也针对数组运算提供大量的数学函数库。NumPy的底层使用C语言编写,这使得其执行效率远高于纯Python代码。 **安装NumPy**: 在Python环境中安装NumPy非常简单,可以通过pip命令进行安装: ```bash pip install numpy ``` 安装完成后,即可在Python代码中通过`import numpy as np`来引入NumPy库,并习惯性地使用`np`作为别名。 #### 二、NumPy的核心:ndarray NumPy的核心数据结构是ndarray(N-dimensional array,即N维数组),它是一个固定大小的同类型元素数组。与Python内置的列表(list)相比,ndarray在存储效率和操作速度上具有显著优势,因为ndarray在内存中连续存储数据,且所有元素类型相同,这使得NumPy能够利用底层C语言库进行高效的数组操作。 ##### 2.1 ndarray的创建 NumPy提供了多种创建ndarray的方法,包括但不限于以下几种: - **使用`np.array()`**:从Python列表或元组等创建ndarray。 ```python import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr) # 输出:[1 2 3 4 5] ``` - **使用`np.zeros()`和`np.ones()`**:分别创建指定形状的全0和全1数组。 ```python zeros_arr = np.zeros((3, 4)) # 创建一个3x4的全0数组 ones_arr = np.ones((2, 3)) # 创建一个2x3的全1数组 ``` - **使用`np.arange()`**:类似于Python的`range()`函数,但返回的是ndarray。 ```python arange_arr = np.arange(10) # 类似于range(10),但返回ndarray ``` - **使用`np.linspace()`**:在指定区间内返回均匀间隔的数字组成的数组。 ```python linspace_arr = np.linspace(0, 10, 5) # 从0到10等间距生成5个数 ``` - **使用`np.random.rand()`, `np.random.randn()`, `np.random.randint()`等**:生成随机数组。 ```python rand_arr = np.random.rand(3, 4) # 生成3x4的[0, 1)区间均匀分布的随机数组 randn_arr = np.random.randn(2, 2) # 生成2x2的标准正态分布随机数组 randint_arr = np.random.randint(1, 10, size=(2, 3)) # 生成2x3的[1, 10)区间随机整数数组 ``` ##### 2.2 ndarray的基本属性 了解ndarray的基本属性对于有效操作数组至关重要。主要属性包括: - **`ndim`**:数组的维度。 ```python print(arr.ndim) # 对于一维数组,输出1 ``` - **`shape`**:数组的维度大小,返回一个元组。 ```python print(zeros_arr.shape) # 输出:(3, 4) ``` - **`size`**:数组中的元素总数。 ```python print(zeros_arr.size) # 输出:12 ``` - **`dtype`**:数组中元素的类型。 ```python print(arr.dtype) # 默认为int64,根据输入数据自动推断 ``` - **`itemsize`**:数组中每个元素的大小(以字节为单位)。 ```python print(arr.itemsize) # 输出根据dtype而定,如int64则为8 ``` ##### 2.3 ndarray的基本操作 NumPy提供了丰富的数组操作方法,这些操作大大简化了数据处理的复杂度,提高了处理效率。以下是一些基本操作的示例: - **索引与切片**:与Python列表类似,但支持多维索引。 ```python print(zeros_arr[0, :]) # 输出第一行的所有元素 print(rand_arr[:, 1]) # 输出所有行的第二列 ``` - **算术运算**:对数组进行加、减、乘、除等运算时,NumPy会进行元素级别的操作(广播机制除外)。 ```python add_arr = rand_arr + 10 # 每个元素加10 sub_arr = rand_arr - rand_arr[:, 0:1] # 列减去对应行的第一个元素 ``` - **广播机制**:当两个数组的形状不一致时,NumPy能够自动扩展(broadcast)较小数组的形状,以便进行元素级操作。 ```python a = np.array([[1, 2], [3, 4]]) b = np.array([10, 20]) print(a + b) # 广播机制,b被扩展为[[10, 20], [10, 20]] ``` - **聚合操作**:如求和、平均值、最大值、最小值等。 ```python print(rand_arr.sum()) # 所有元素的和 print(rand_arr.mean()) # 所有元素的平均值 print(rand_arr.max()) # 所有元素中的最大值 print(rand_arr.argmax()) # 最大值所在位置的索引 ``` - **排序与搜索**:NumPy提供了多种排序和搜索数组元素的函数。 ```python sorted_arr = np.sort(rand_arr) # 对数组进行排序 indices = np.argsort(rand_arr) # 返回排序后元素的索引 value_index = np.where(rand_arr == rand_arr.max())[0][0] # 搜索最大值的位置 ``` - **数组重塑与转置**:改变数组的形状而不改变其数据。 ```python reshaped_arr = rand_arr.reshape((3, -1)) # 重塑数组,-1表示自动计算该维度大小 transposed_arr = rand_arr.T # 数组转置 ``` #### 三、总结 本章详细介绍了NumPy的核心数据结构——ndarray,包括其创建方式、基本属性以及一系列基本操作方法。NumPy的ndarray不仅为科学计算和数据分析提供了强大的工具,更是深度学习框架(如PyTorch、TensorFlow)底层实现的重要基础。通过深入理解ndarray,读者将能够更好地利用NumPy进行高效的数据预处理和特征工程,为后续深度学习模型的构建与优化奠定坚实的基础。在后续章节中,我们将继续探讨NumPy的高级特性,如广播机制、数组迭代、内存管理等,以及如何利用NumPy与PyTorch等深度学习框架协同工作,共同推进数据科学与人工智能领域的发展。
上一篇:
01 | PyTorch:网红中的顶流明星
下一篇:
03 | NumPy(下):深度学习中的常用操作
该分类下的相关小册推荐:
区块链权威指南(上)
人人都能学AI,66个提问指令,14个AI工具
人工智能超入门丛书--数据科学
玩转ChatGPT:秒变AI提问和追问高手(下)
深度强化学习--算法原理与金融实践(二)
玩转ChatGPT:秒变AI提问和追问高手(上)
生成式AI的崛起:ChatGPT如何重塑商业
ChatGPT与提示工程(下)
深度学习与大模型基础(下)
大模型应用解决方案-基于ChatGPT(中)
NLP入门到实战精讲(上)
大模型应用解决方案-基于ChatGPT(下)