1、从numpy导入
注:从np导入的Float其实是DOUBLE类型
a = np.array([2, 3.3])
torch.from_numpy(a)a = np.ones([2,3])
torch.from_numpy(a)
2、从list导入
torch.tensor([2., 3.2])torch.FloatTensor([2., 3.2])
#或者Tensor,可以接受shape,如二行三列(2,3)torch.tensor([[2., 3.2], [1., 22.3]])
3、未初始化数据生成
会生成一系列或大或小无规律的数据,只是作为容器,需要后续真实数据进行替换
torch.empty()torch.Tensor(2, 3)torch.IntTensor(2, 3)torch.FloatTensor(2, 3)
4、设置默认tensor类型
使用tensor生成张量数据,默认是float类型
torch.set_default_tensor_type(torch.DoubleTensor)
#增强学习一般使用double,其他一般使用float
5、均匀分布 rand/rand_like, randint
rand:
sample出的元素符合在[0,1)空间均值分布
如:a = torch.rand(3 ,3) , (3, 3)是shape
rand_like:
将一个目标张量a的shape读取之后,在进行[0,1)均值分布随机sanple数据填充
要是想生成[0, 10)均匀分布的数值,10 * torch.rand_like(a)
randint:
只能sample整数,且要给出数值范围和shape。
如: torch.randint(1, 10, (3, 3))
6、正态分布 randn
最常见的N(0, 1):
torch.randn(3, 3), (3, 3)是shape
7、full全部填充同一数值
full:给定目标张量shape,再给定填充数值
torch.full([shape], number)
8、arange/range 阶梯
在torch中建议使用arange,不需要使用range
arange:
torch.arange(min, max, step)# --> [min, max), step默认为1
9、linspace/logspace 等分
linspace:
torch.linspace(min, max, steps=?)
#[min, max], steps不是阶梯大小,而是stpes等于几,就等分为几个数,阶梯数等于stpes - 1
logspace:
在linspace结果上,里面的各元素作为x,最后各元素位置的数值结果为10的x次方
10、ones/zeros/eye
ones、zeros:
指定张量的shape,所有元素的值赋值为0、1
eye:
单位矩阵
torch.eye(3)则生成3*3的单位矩阵
若torch.eye(3,4),则多余的第四列数值均为0
11、randperm随机打散
torch.randperm(10) -->[0,10)
索引实现random.shuffle效果:
定义
a = torch.rand(2,3)
假设两行分别是人物1、人物2的a信息
b = torch.rand(2,2)
假设两行分别是人物1、人物2的b信息
现在想随机索引行顺序,但人物1、人物2对应的信息不变,只变数据顺序
idx = torch.randperm(2)
idx #看索引顺序
a[idx]
b[idx] # a、b都按idx的索引顺序进行打乱,但人物1、人物2对应的信息依旧不变