当前位置: 首页 > article >正文

Pytorch深度学习教程_2_Numpy数值计算

欢迎来到PyTorch深度学习教程系列!在本系列中,我们将从零开始学习如何使用PyTorch进行深度学习开发。本篇是系列的第二篇,我们将快速掌握Numpy数值计算,为后续的深度学习学习打下坚实的基础。

对于深度学习环境配置及pytorch的下载安装可以用我写的博客:

2025最新深度学习pytorch完整配置:conda/jupyter/vscode-CSDN博客

之前的一篇博客系统梳理了python的框架,可以先看这个:

Pytorch深度学习教程_1_Python基础快速掌握-CSDN博客


目录

1.NumPy基础

什么是 NumPy 数组?

创建 NumPy 数组

从 Python 列表创建:

使用内置函数创建:

NumPy 数组的关键属性

基本操作

算术运算:

索引和切片:访问数组中的特定元素或子集。

2.数组操作和广播机制

基本数组操作

广播机制

常见问题和最佳实践

3.Numpy线性代数计算

数据形式

向量:用一维NumPy数组表示。

矩阵:用二维NumPy数组表示。

 基本线性代数运算

矩阵乘法:

矩阵求逆:

行列式:

特征值和特征向量:

线性代数是许多领域的基础:

4.Numpy数据操作

重塑数组

合并数组

分割数组

索引和切片的深入

挑战和注意事项

5.结语


1.NumPy基础

NumPy 是 Python 中数值计算的基石库。它提供了高性能的多维数组对象,以及大量用于操作这些数组的函数集合。

什么是 NumPy 数组?

与 Python 列表不同,NumPy 数组是同构的,意味着它们包含相同数据类型的元素。这种统一性使得计算和内存使用效率更高。此外,NumPy 数组支持多维结构,非常适合表示矩阵和张量。

创建 NumPy 数组

你可以从多种来源创建 NumPy 数组:

从 Python 列表创建:
import numpy as np

my_list = [1, 2, 3, 4]
my_array = np.array(my_list)

使用内置函数创建:
zeros = np.zeros(5)  # 创建一个全零数组
ones = np.ones((2, 3))  # 创建一个 2x3 的全一数组
arange = np.arange(10)  # 创建一个从 0 到 9 的数组

NumPy 数组的关键属性

  • 形状 (Shape)‌:定义数组的维度。

print(my_array.shape)  # 输出数组的形状

  • 数据类型 (Data type)‌:指定数组中元素的类型。
print(my_array.dtype)  # 输出数组的数据类型

  • 大小 (Size)‌:数组中元素的总数。
print(my_array.size)  # 输出数组的元素个数

 

基本操作

NumPy 擅长在数组上进行元素级操作,相比 Python 列表具有显著的速度优势。

算术运算:
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
result = x + y  # 元素级加法
索引和切片:访问数组中的特定元素或子集。
first_element = my_array[0]  # 获取第一个元素
subarray = my_array[1:3]  # 获取从索引 1 到 2 的子数组

 

2.数组操作和广播机制

NumPy 允许对整个数组进行操作,而不需要显式的循环,这得益于向量化和广播机制。

基本数组操作

算术运算在兼容的数组上按元素进行:

import numpy as np

x = np.array([1, 2, 3])
y = np.array([4, 5, 6])

sum_array = x + y  # 元素级加法
difference = x - y  # 元素级减法
product = x * y  # 元素级乘法
division = x / y  # 元素级除法

 聚合函数用于计算数组的统计信息:

mean_value = np.mean(x)
sum_value = np.sum(x)
max_value = np.max(x)
min_value = np.min(x)

广播机制

广播是 NumPy 的一项功能,允许在不同形状的数组之间进行操作,通过扩展较小的数组以匹配较大数组的形状。

scalar = 2
array = np.array([1, 2, 3])
result = array * scalar  # 将标量扩展为数组形状

更复杂的广播机制:

a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
result = a * b  # 将 b 扩展以匹配 a 的形状

常见问题和最佳实践

  • 形状不匹配:确保数组在操作时形状兼容。
  • 索引错误:注意索引范围,避免越界错误。
  • 性能优化:尽量使用向量化操作以提高效率。
  • 代码清晰:使用清晰的变量名和注释。

通过掌握数组操作和广播机制,可以充分发挥 NumPy 在数值计算方面的潜力。

3.Numpy线性代数计算

线性代数涉及向量空间、线性变换和线性方程组。它是从图像处理到机器学习等各种应用背后的数学语言。NumPy提供了一套丰富的函数来进行线性代数运算,使其成为数据科学家和工程师的强大工具。

数据形式

向量:用一维NumPy数组表示。

import numpy as np

vector = np.array([1, 2, 3])

矩阵:用二维NumPy数组表示。

matrix = np.array([[1, 2], [3, 4]])

 基本线性代数运算

矩阵乘法:

result = np.dot(matrix1, matrix2)

矩阵求逆:

inverse = np.linalg.inv(matrix)

行列式:

determinant = np.linalg.det(matrix)

特征值和特征向量:

eigenvalues, eigenvectors = np.linalg.eig(matrix)

线性代数是许多领域的基础:

  • 机器学习:用于回归、分类和神经网络。
  • 图像处理:将图像表示为矩阵并进行变换。
  • 计算机图形学:使用矩阵操作3D对象。
  • 物理和工程:用线性方程建模物理系统。

4.Numpy数据操作

NumPy 是一个强大的工具,用于处理和重塑数组,以满足数据处理需求。这些操作对于准备机器学习数据和执行各种计算至关重要。

重塑数组

重塑数组是指在不改变数据的情况下改变数组的形状。

import numpy as np

array = np.arange(12)
reshaped_array = array.reshape(3, 4)

展平数组是指将多维数组转换为一维数组。

flattened_array = reshaped_array.flatten()

合并数组

连接数组是指沿着现有轴连接数组。

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
combined_array = np.concatenate((array1, array2))

堆叠数组是指沿着新轴堆叠多个数组,创建一个新的数组。

stacked_array = np.stack((array1, array2))

分割数组

分割数组是指将数组分成多个子数组。

split_array = np.split(array, 3)

索引和切片的深入

我们已经了解了基本的索引和切片操作,现在让我们更深入地探讨。

花式索引是指使用索引数组来选择元素。

indices = [1, 3]
selected_elements = array[indices]

布尔索引是指根据布尔条件选择元素。

condition = array > 5
filtered_array = array[condition]

挑战和注意事项

  • 形状兼容性:确保数组在操作(如连接和堆叠)时具有兼容的形状。
  • 效率:对于大型数据集,考虑使用优化的函数,如 np.concatenate,而不是循环。
  • 内存使用:在重塑或创建大型数组时,注意内存消耗。

通过掌握数组操作技术,你将能够高效地处理各种数据处理任务。

5.结语

如此一来,你已经快速掌握了numpy的基本使用,接下来在实践的过程中,遇到更多的numpy问题,可以边用边查,这个是最好的。

下一章我们正式开始pytorch的学习!


http://www.kler.cn/a/547651.html

相关文章:

  • 计算机性能与网络体系结构探讨 —— 基于《计算机网络》谢希仁第八版
  • 中国AI“拥抱开源”给世界的启示——Anko
  • CAS单点登录(第7版)12.密码管理
  • markdown|mermaid|typora绘制流程图的连接线类型怎么修改?
  • 【STM32】增量型旋钮编码器
  • 伪装目标检测(Camouflaged Object Detection, COD)教程
  • 使用llama.cpp在gpu和cpu上运行deepseek-r1 7b的性能对比
  • 【日常经验】五种密码加密方式比较
  • 基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录
  • JVM 底层探秘:对象创建的详细流程、内存分配机制解析以及线程安全保障策略
  • Agent快速构建框架的langGraph到底是什么及案例
  • Android Studio:EditText常见4种监听方式
  • 鸿蒙Harmony通过命令行生成doc
  • C# windowForms 的DataGridView控件的使用
  • 【鸿蒙在OpenHarmony系统上集成OpenCV,实现图片裁剪】
  • 蓝耘云智算|使用 Deepseek R1 模型优化 BERT 在 NLP 任务中的表现
  • DeepSeek HuggingFace 70B Llama 版本 (DeepSeek-R1-Distill-Llama-70B)
  • P5693 EI 的第六分块 Solution
  • SpringBoot Configuration Annotation Processor not configured 解决方案和详细问题分析以及作用
  • STM32——HAL库开发笔记16(SPI外部flash实验2)(参考来源:b站铁头山羊)