创建tensor的方法
1、从numpy数组转换而来
np.array([2,3,3])
torch.from_numpy(a)
2、从list导入,将list元素作为参数传入
注意点:tensor()的参数为现有数据,而Tensor()的参数为表示shape的元组,也可以接收现有数据,如c=torch.FloatTensor([2.3,1.36])。
Tensor的默认类型是FloatTensor,如果想改变,可以使用torch.set_default_tensor_type(torch.DouubleTensor)改变
使用随机值初始化tensor
1、torch.rand:随机值在[0,1]
2、torch.rand_like:接收一个tensor,用该tensor来生成随机值
3、torch.randint:需要指定最小值和最大值,[min,max) 如torch.randint(1,10,[3,3])
4、torch.randn(3,3):产生3x3的服从标准高斯分布的元素值
5、torch.normal():自定义的正太分布,返回一个张量,包含从给定参数means
,std
的离散正态分布中抽取随机数。 均值means
是一个张量,包含每个输出元素相关的正态分布的均值。 std
是一个张量,包含每个输出元素相关的正态分布的标准差。 均值和标准差的形状不须匹配,但每个张量的元素个数须相同。
如果想要tensor的每个元素值均相同,那么可以使用torch.full()
torch.arange(0,10,x):生成从0到10(不含),间隔为x的数组,若没有x,则x默认为1
torch.linespace(0,10,steps=x):把[0,10](包含10)等分为x份。
torch.randperm(n, out=None):
给定参数n,返回一个从0到n-1的随机整数排列
使用randperm可以生成一个从0开始的、已经打乱的连续索引Tensor,用它可以对其它Tensor做shuffle。特别是在有几个需要保持一致顺序的Tensor时,用相同的索引Tensor就能保证shuffle之后的Tensor在那个维度上的顺序一致了。
import torch
# 两个Tensor的shape[0]是相同的,都是3
a = torch.rand(3, 1)
b = torch.rand(3, 1)
print(a, b, sep='n')
print("-" * 20)
# 制造一个[0,3)的索引序列
idx = torch.randperm(3)
print(idx)
print("-" * 20)
# 给a,b做shuffle,保证第一个维度在shuffle后的对应关系不变
a_sf = a[idx]
b_sf = b[idx]
print(a_sf, b_sf, sep='n')
输出:
tensor([[0.2253],
[0.6864],
[0.9565]])
tensor([[0.7317],
[0.0779],
[0.3842]])
--------------------
tensor([2, 1, 0])
--------------------
tensor([[0.9565],
[0.6864],
[0.2253]])
tensor([[0.3842],
[0.0779],
[0.7317]])
############################################
torch.index_select:按具体下标索引数据
torch.view:调整数据尺寸
torch.unsqueeze:增加维度
torch.squeeze:减少维度
torch.expand:
torch.repeat:
permute可以对任意高维矩阵进行转置,但没有 torch.permute() 这个调用方式, 只能 Tensor.permute()。
transpose只能操作2D矩阵的转置。有两种调用方式。
连续使用transpose也可实现permute的效果。