记录pytorch常用的维度转换方法

对于pytorch常用的维度转换方法一直不熟悉,今天在网上查了资料,简单尝试之后汇总记录一下,方便以后查找

import torch
#**********生成数据**********
#***生成固定数据***
test1 = torch.tensor([[1,2,3],[4,5,6]])

#***生成随机数据***
test = torch.rand(2,4)

#***生成符合高斯分布的随机数据***
test = torch.randn(2,4)

#***生成一定范围内的数据***
test = torch.arange(1,6)#test的值为[1,2,3,4,5],同样遵循取值区间左闭右开的原则


#**********查看数据维度**********
data_size = test.size()
data_size = test.shape#两种方式都输出数据的维度
print(data_size)#输出结果:(2,4)

#**********转换数据维度**********
print(test1.size())#输出结果:(2,3)

#***view函数***
test1 = test1.view(3,2)#将数据维度由(2,3)转换为(3,2)
test1 = test1.view(-1,2)#第一位是-1,代表这一位的数据维度,由数据总维度和第二位的2计算得到,第二位可写成test1.size(0)就不用人为判定第二位的具体数值

#***permute函数***
test2 = torch.tensor([[[1,2,3],[4,5,6]]])
print(test2.size())#输出结果(1,2,3)
test2 = test2.permute(0,2,1)#代表将test2的数据维度(1,2,3)中的第二个维度3和第一个维度2转换位置(下标从0开始)即将test2的数据维度由(1,2,3)转换为(1,3,2)

#***squeeze和unsqueeze***
#**squeeze函数是减去一个一维的维度**
test = torch.tensor([[[1,2,3],[4,5,6]]])
print(test.size())#test数据维度(1,2,3)
test = test.squeeze(0)#squeeze(0)代表将第0个维度去掉,并且第0个维度必须是1print(test.size())#test的数据维度变为(2,3)
print(test)#test变为[[1,2,3],[4,5,6]]

#**unsqueeze函数是增加一个一维的维度**
test = torch.tensor([[1,2,3],[4,5,6]])
test = test.unsqueeze(1)#数据维度是(2,3),unsqueeze后在第1个维度处增加1维,即数据维度变为(2,1,3)
print(test.size())#(2,1,3)
print(test)#[[[1,2,3]],[[4,5,6]]]

#***expand和expand_as***
#这两个函数只能对只有一个元素的数据维度进行扩张
test = torch.rand(1,2)
print(test)#假设生成的随机数是[-0.15,0.12]
test = test.expand(2,2)#expand函数的参数是数字,并且对维度为(1,2)的数据,只能扩展维度为1的第一个维度,维度为2的第二个维度必须保持一致。
print(test)#[[-0.15,0.12],[-0.15,0.12]]

test2 = torch.rand(2,2)
test = test.expand_as(test2)#expand_as函数的参数是tensor

numpy在查看数据维度时与torch有些不同

import numpy as np

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

print(test.size)#输出test数据的元素总数量,即6
print(test.shape)#输出test数据的维度,即(2,3)

#转换数据维度
test = test.reshape(3,2)#将原有的(2,3)维度转换为(3,2

你可能感兴趣的:(深度学习经验总结,python,人工智能)