pytorch torch运算操作示例详解

 更新时间:2024年06月18日 10:07:26   作者:九磅十五便士丶  
这篇文章主要介绍了pytorch torch运算的相关知识,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

torch运算

基本运算

创建张量:

import torch
# 直接从列表或数组创建张量
x = torch.tensor([1, 2, 3])

创建特定值的张量:

# 全零张量
zeros = torch.zeros(3, 3)
# 全一张量
ones = torch.ones(3, 3)
# 单位张量(对角线为1,其余为0)
eye = torch.eye(3)
# 随机张量
rand = torch.rand(3, 3)
# 从均值为0,标准差为1的正态分布中抽取的随机张量
randn = torch.randn(3, 3)

创建等差数列张量:

# 从0到10(不包括10)的等差数列,步长为2
arange = torch.arange(0, 10, 2)

创建特定间隔的数列张量:

# 从0到10均匀分布的5个数
linspace = torch.linspace(0, 10, 5)

2.加法和减法:

# 加法
z = x + y  # torch.add(x, y)
print(z)  # 输出: tensor([5, 7, 9])
# 减法
z = x - y  # torch.sub(x, y)
print(z)  # 输出: tensor([-3, -3, -3])

3.乘法和除法:

# 元素乘法
z = x * y  # torch.mul(x, y)
print(z)  # 输出: tensor([ 4, 10, 18])
# 元素除法
z = x / y  # torch.div(x, y)
print(z)  # 输出: tensor([0.2500, 0.4000, 0.5000])

4.矩阵乘法:

a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])
# 矩阵乘法
z = torch.matmul(a, b)  # 或者 a @ b
print(z)  # 输出: tensor([[19, 22], [43, 50]])

形状操作

1.改变形状:view()

a = torch.tensor([[1, 2, 3], [4, 5, 6]])
# 改变形状
b = a.view(3, 2)
print(b)
# 输出:
# tensor([[1, 2],
#         [3, 4],
#         [5, 6]])

自动调整size (参数-1)

view中一个参数指定为-1,代表自动调整这个维度上的元素个数,以保证元素的总数不变。

import torch
x1 = torch.arange(0,16)
print(x1)
#a1: tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])
------------------------------------------------------------------------------------------------------   
x2 = x1.view(-1, 16)
x3 = x1.view(-1, 8)
x4 = x1.view(-1, 4)
x5 = x1.view(-1, 2)
print(x2)
print(x3)
print(x4)
print(x5)
x2: tensor([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15]])
x3: tensor([[ 0,  1,  2,  3,  4,  5,  6,  7],
        [ 8,  9, 10, 11, 12, 13, 14, 15]])
x4: tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15]])
x5: tensor([[ 0,  1],
        [ 2,  3],
        [ 4,  5],
        [ 6,  7],
        [ 8,  9],
        [10, 11],
        [12, 13],
        [14, 15]])

2.拼接:

x = torch.tensor([[1, 2], [3, 4]])
y = torch.tensor([[5, 6], [7, 8]])
# 沿着0轴拼接(垂直拼接)
z = torch.cat((x, y), dim=0)
print(z)
# 输出:
# tensor([[1, 2],
#         [3, 4],
#         [5, 6],
#         [7, 8]])
# 沿着1轴拼接(水平拼接)
z = torch.cat((x, y), dim=1)
print(z)
# 输出:
# tensor([[1, 2, 5, 6],
#         [3, 4, 7, 8]])

3.切片:

a = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 切片
b = a[:, 1]  # 第二列
print(b)  # 输出: tensor([2, 5, 8])

数学运算

求和:sum()

x = torch.tensor([1, 2, 3, 4])
# 求和
sum_x = torch.sum(x)
print(sum_x)  # 输出: tensor(10)

均值:mean()

# 均值
mean_x = torch.mean(x.float())  # 转换为浮点数类型
print(mean_x)  # 输出: tensor(2.5000)

最大值和最小值:max(),min()

# 最大值
max_x = torch.max(x)
print(max_x)  # 输出: tensor(4)
# 最小值
min_x = torch.min(x)
print(min_x)  # 输出: tensor(1)

逻辑运算

比较运算:

x = torch.tensor([1, 2, 3])
y = torch.tensor([2, 2, 2])
# 大于
print(x > y)  # 输出: tensor([False, False,  True])
# 小于
print(x < y)  # 输出: tensor([ True, False, False])

逻辑与、或:

a = torch.tensor([True, False, True])
b = torch.tensor([False, False, True])
# 逻辑与
c = torch.logical_and(a, b)
print(c)  # 输出: tensor([False, False,  True])
# 逻辑或
c = torch.logical_or(a, b)
print(c)  # 输出: tensor([ True, False,  True])

常见的高级操作

广播机制:

a = torch.tensor([1, 2, 3])
b = torch.tensor([[1], [2], [3]])
# 广播机制
c = a + b
print(c)
# 输出:
# tensor([[2, 3, 4],
#         [3, 4, 5],
#         [4, 5, 6]])

自动梯度计算:

x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
# 前向传播
y = x + 2
z = y * y * 2
out = z.mean()
# 反向传播
out.backward()
print(x.grad)  # 输出: tensor([4.6667, 6.0000, 7.3333])

随机数生成

从标准正态分布中生成随机张量:

randn_tensor = torch.randn(3, 3) # 生成一个形状为 (3, 3) 的随机张量,服从标准正态分布
print(randn_tensor)
#tensor([[ 1.2335, -0.3941,  0.8990],
#        [ 0.0470, -1.2671,  0.3248],
#       [-0.4062, -0.6862,  0.1314]])

生成随机排列:

randperm_tensor = torch.randperm(10)  # 生成一个从 0 到 9 的随机排列
print(randperm_tensor)
#tensor([2, 0, 5, 1, 8, 6, 3, 4, 7, 9])

生成等差数列张量:

arange_tensor = torch.arange(0, 10, 2) # 生成从 0 到 10(不包括 10)的等差数列,步长为 2
print(arange_tensor)
#tensor([0, 2, 4, 6, 8])

到此这篇关于pytorch torch运算操作示例详解的文章就介绍到这了,更多相关pytorch torch运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现wav和pcm的转换方式

    Python实现wav和pcm的转换方式

    这篇文章主要介绍了Python实现wav和pcm的转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Python定时任务工具之APScheduler使用方式

    Python定时任务工具之APScheduler使用方式

    APScheduler (advanceded python scheduler)是一款Python开发的定时任务工具。这篇文章主要介绍了Python定时任务工具--APScheduler的使用方式,需要的朋友可以参考下
    2019-07-07
  • Python基于docker部署的Mysql备份查询脚本

    Python基于docker部署的Mysql备份查询脚本

    这篇文章主要来和大家分享Python基于docker部署的Mysql备份查询的脚本,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起了解下
    2024-04-04
  • Python Django源码运行过程解析

    Python Django源码运行过程解析

    这篇文章主要介绍了Python Django源码运行过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • python makedirs() 递归创建目录

    python makedirs() 递归创建目录

    os.makedirs()函数用于在Python中递归地创建目录,支持设置权限和处理目录已存在的情况,下面就来具体介绍一下,感兴趣的可以了解一下
    2024-12-12
  • Python之变量类型和if判断方式

    Python之变量类型和if判断方式

    这篇文章主要介绍了Python之变量类型和if判断方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python图片水印加密的几种处理小结

    python图片水印加密的几种处理小结

    本文主要介绍了python图片水印加密的几种处理小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Python 局部变量global详解

    Python 局部变量global详解

    这篇文章主要介绍了Python 局部变量global详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Python实现的批量修改文件后缀名操作示例

    Python实现的批量修改文件后缀名操作示例

    这篇文章主要介绍了Python实现的批量修改文件后缀名操作,涉及Python目录文件的遍历、重命名等相关操作技巧,需要的朋友可以参考下
    2018-12-12
  • 使用Python进行图像裁剪的多种方法及代码示例

    使用Python进行图像裁剪的多种方法及代码示例

    这篇文章主要介绍了使用Python进行图像裁剪的多种方法,包括使用PIL库和OpenCV库,还提供了高级技巧和示例代码,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01

最新评论