pytorch的基本操作

目录

创建tensor

torch与numpy相互转化

直接创建tensor

根据数值要求:

根据矩阵要求:

随机采用生成:

索引和切片

维度变换

1. 改变shape

2.增加维度

3.删减维度

4.维度扩展

5.维度重复

 6.转置操作

7.维度交换


创建tensor

torch与numpy相互转化

a=np.array([2,2.2])
torch.from_numpy(a)
a=torch.tensor([2.,3])
b=a.numpy()

直接创建tensor

a=torch.tensor([2.,3])

a=torch.FloatTensor([[2,5],[2.,3]])

根据数值要求:

torch.zeros(*sizes, out=None, ..)# 返回大小为sizes的零矩阵 

torch.zeros_like(input, ..) # 返回与input相同size的零矩阵

torch.ones(*sizes, out=None, ..) #f返回大小为sizes的单位矩阵

torch.ones_like(input, ..) #返回与input相同size的单位矩阵

torch.full(size, fill_value, …) #返回大小为sizes,单位值为fill_value的矩阵

torch.full_like(input, fill_value, …) 返回与input相同size,单位值为fill_value的矩阵

torch.arange(start=0, end, step=1, …) #返回从start到end, 单位步长为step的1-d tensor.

torch.linspace(start, end, steps=100, …)  #返回从start到end, 间隔中的插值数目为steps的1-d tensor

torch.logspace(start, end, steps=100, …) #返回1-d tensor ,从10^start到10^end的steps个对数间隔

根据矩阵要求:

torch.eye(n, m=None, out=None,…) #返回2-D 的单位对角矩阵

torch.empty(*sizes, out=None, …) #返回被未初始化的数值填充,大小为sizes的tensor

torch.empty_like(input, …) # 返回与input相同size,并被未初始化的数值填充的tensor

随机采用生成:

torch.normal(mean, std, out=None)

torch.rand(*size, out=None, dtype=None, …) #返回[0,1]之间均匀分布的随机数值

torch.rand_like(input, dtype=None, …) #返回与input相同size的tensor, 填充均匀分布的随机数值

torch.randint(low=0, high, size,…) #返回均匀分布的[low,high]之间的整数随机值

torch.randint_like(input, low=0, high, dtype=None, …) #

torch.randn(*sizes, out=None, …) #返回大小为size,由均值为0,方差为1的正态分布的随机数值

torch.randn_like(input, dtype=None, …)

torch.randperm(n, out=None, dtype=torch.int64) # 返回0到n-1的数列的随机排列

索引和切片

a=torch.rand(4,3,28,28)
维度
print(a[0].shape)
切片
print(a[:2,:1,:,:].shape)
索引
print(a.index_select(2,torch.arange(28)).shape)

维度变换

1. 改变shape

torch.reshape()、torch.view()可以调整Tensor的shape,返回一个新shape的Tensor,torch.view()是老版本的实现,torch.reshape()是最新的实现,两者在功能上是一样的。

a = torch.rand(4, 1, 28, 28)
print(a.view(4 * 1, 28, 28).shape)
print(a.reshape(4 * 1, 28, 28).shape)

大小都是4*1*28*28!!

2.增加维度

torch.unsqueeze(index)可以为Tensor增加一个维度,增加的这一个维度的位置由我们自己定义,新增加的这一个维度不会改变数据本身

a = torch.rand(4, 1, 28, 28)
print(a.unsqueeze(0).shape)

这个Tensor有4个维度,我们可以在现有维度的基础上插入一个新的维度,插入维度的index在[-a.dim()-1, a.dim()+1]范围内,并且当index>=0,则在index前面插入这个新增加的维度;当index < 0,怎在dim=0出增加

3.删减维度

删减维度实际上就是维度挤压的过程,只能删除size=1的维度

a = torch.rand(4, 1, 28, 28)
print(a.squeeze(1).shape)成功
print(a.squeeze(2).shape)失败

4.维度扩展

torch.expand()必须保证同维度,维度不足则用torch.unsqueeze(index)补充

bias = torch.rand(32)
bias = bias.unsqueeze(1).unsqueeze(2).unsqueeze(0)
bias.expand(4, -1, 14, 14)

5.维度重复

repeat就是将每个位置的维度都重复至指定的次数,以形成新的Tensor,功能与维度扩展一样,但是repeat会重新申请内存空间,repeat()参数表示各个维度指定的重复次数。

b = torch.Tensor(1, 32, 1, 1)
b=b.repeat(4,1,14,14)
print(b.shape)

输出:torch.Size([4, 32, 14, 14])

 6.转置操作

tensor.t()

7.维度交换

 transpose(dim1, dim2)交换dim1与dim2

permute(0, 2, 3, 1)交换对应下标维度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值