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系统交互库解析过程

    Python系统交互库解析过程

    本文介绍了Python中os、sys、subprocess等模块及paramiko、Fabric、socket、requests等库的核心功能,涵盖文件操作、系统交互、进程管理、网络通信、数据处理等场景,并强调了安全使用YAML等格式的注意事项
    2025-07-07
  • Pycharm更换安装源与添加第三方库方法详解

    Pycharm更换安装源与添加第三方库方法详解

    在使用Pycharm的时候不免要下载许多的第三方库,特别是移植过来的项目更是一个文件的依赖包需要下载而Pycharm默认的官方源下载比较慢,所以下面这篇文章主要给大家介绍了关于Pycharm更换安装源与添加第三方库的相关资料,需要的朋友可以参考下
    2023-02-02
  • Django高并发负载均衡实现原理详解

    Django高并发负载均衡实现原理详解

    这篇文章主要介绍了Django高并发负载均衡实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • python实现数字炸弹游戏

    python实现数字炸弹游戏

    这篇文章主要为大家详细介绍了python实现数字炸弹游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • Python 错误和异常代码详解

    Python 错误和异常代码详解

    这篇文章主要介绍了Python 错误和异常代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python只用40行代码编写的计算器实例

    Python只用40行代码编写的计算器实例

    这篇文章主要介绍了Python只用40行代码编写的计算器,结合完整实例形式分析了Python计算器的具体实现技巧,需要的朋友可以参考下
    2017-05-05
  • Python小技巧练习分享

    Python小技巧练习分享

    这篇文章主要介绍了Python小技巧练习分享,文章基于python的相关内容展开详细的python小技巧内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Django 路由控制的实现代码

    Django 路由控制的实现代码

    这篇文章主要介绍了Django 路由控制的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Python JMESPath库轻松操作JSON进行数据查询方法实例

    Python JMESPath库轻松操作JSON进行数据查询方法实例

    这篇文章主要为大家介绍了Python JMESPath库轻松操作JSON方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 浅谈Python程序与C++程序的联合使用

    浅谈Python程序与C++程序的联合使用

    这篇文章主要介绍了浅谈Python程序与C++程序的联合使用,主要包括6中方案,需要的朋友可以参考下
    2015-04-04

最新评论