pytorch数据操作

本文介绍了PyTorch中张量的创建、运算和索引的基本概念。通过示例展示了如何创建不同形状的张量,包括全零、全一和随机初始化的张量。还详细讲解了张量的加法、乘法、指数运算以及连接操作。此外,文章提到了张量的广播机制,并演示了如何进行索引和切片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一.创建数据

二.运算

 三.索引和切片


一.创建数据

张量Tensors表示由一个数值组成的数组,这个数组可能有多个维度。

张量中的每个值都称为张量的元素

理解张量:
张量是多维数组

 把三维张量画成一个立方体:

>>> import torch             
>>> x = torch.arange(12)             #arange创建一个行向量x。这个行向量包含从0开始的前12个整数,它们被默认创建为浮点数

>>> x
tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

通过张量的shape属性来访问张量的形状 (沿每个轴的长度)

>>> x.shape
torch.Size([12])

张量中元素的总数,即形状的所有元素乘积,可以检查它的大小(size)。 因为这里在处理的是一个向量,所以它的shape与它的size相同。

>>> x.numel()
12

改变一个张量的形状而不改变元素数量和元素值,可以调用reshape函数

>>> x.reshape(3,4)
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])

>>> x.reshape(-1,3)             #张量在给出其他部分后可以自动计算出一个维度
tensor([[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]])
>>> x.reshape(3,-1)
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])

另:

>>> m=torch.arange(12, dtype=torch.float32).reshape((3,4))      #创建为float32的浮点数的张量


>>> m
tensor([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.]])

全0、全1、其他常量或者从特定分布中随机采样的数字来初始化矩阵

torch.zeros(行,列,dtype=torch.long)      全0,数据类型是 long.
torch.ones(行,列)    全1
torch.randn(行,列)   随机初始化参数的值
torch.tensor([值])   自己制定,类C语言二维数组赋值

torch.empty(行,列)     不初始化

创建一个 tensor 基于已经存在的 tensor

x = x.new_ones(5, 3, dtype=torch.double)    #x是张量名

>>> torch.zeros(3,4)
tensor([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]])

>>> torch.ones(3,4)
tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]])

>>> torch.randn(3, 4)
tensor([[-1.3953,  1.4881, -0.1567,  0.8208],
        [ 1.1283, -0.7510, -0.3695, -1.3861],
        [-0.2492,  0.6856, -0.5805,  0.7981]])

>>> torch.tensor([[1,2],[2,2]])
tensor([[1, 2],
        [2, 2]])
 

 .item() 来获得一个元素 tensor value 

x = torch.randn(1)
print(x)
print(x.item())

二.运算

所有的运算都是按元素进行

四则运算、乘幂运算都可参照如下:

torch.add(x, y, out=result)    #加法的一种方式,加的值在result 中
print(result)
y.add_(x)
print(y)

张量形状相同的运算

>>> x=torch.tensor([[1,2],[3,4]])                      #元素是整型,就创建整型
>>> y=torch.tensor([[2,3],[4,5]])
>>> x+y
tensor([[3, 5],
        [7, 9]])

张量形状不相同的运算                      广播机制

>>> a = torch.arange(3).reshape((3, 1))
>>> b = torch.arange(2).reshape((1, 2))
>>> a
tensor([[0],
        [1],
        [2]])
>>> b
tensor([[0, 1]])
>>> a+b
tensor([[0, 1],
        [1, 2],
        [2, 3]])

实质为将两个矩阵广播为一个更大的3×2

矩阵a将复制列,矩阵b将复制行,然后再按元素相加。

                         

求幂运算---exp是高等数学里以自然常数e为底的指数函数。exp(x)表示的是e的x次方

>>> torch.exp(x)                          #x是上述的值
tensor([[ 2.7183,  7.3891],                 
        [20.0855, 54.5981]])

张量连接

torch.cat((张量1, 张量2), dim=0)   #dim=0按行连接,dim=1按列连接

>>> torch.cat((x,y),dim=0)
tensor([[1, 2],
        [3, 4],
        [2, 3],
        [4, 5]])
>>> torch.cat((x,y),dim=1)
tensor([[1, 2, 2, 3],
        [3, 4, 4, 5]])

x(x行,x列)

y(y行,y列)

按行连接:x行,x列,y行,y列

按列连接:x行+y行,x列+y列

逻辑张量

>>> x==y
tensor([[False, False],
        [False, False]])

张量名.sum()

对张量中的所有元素进行求和会产生一个只有一个元素的张量

>>> x.sum()
tensor(10)

 三.索引和切片

可以使用标准的  NumPy 类似的索引操作

>>> x[-1]         #输出最后一行
tensor([3, 4])

>>> x[1,1]=99    #修改某一值
>>> x
tensor([[ 1,  2],
        [ 3, 99]])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值