本文集成代码文件下载地址:
为了方便我们查看张量数据,我们先编写一个用于输出张量数据的函数ptf_tensor
import torch
import random
import string
def ptf_tensor(t,tag='tensor_'):
salt = ''.join(random.sample(string.ascii_letters + string.digits, 5))
if (tag=='tensor_'):tag=tag+salt
print('\nThe info of {}:\n#############################\n @dims: {}\n @size: {}\n @ele_sum: {}\n @dtype: {}\n @data:\n{}\n#############################\n'.format(tag,t.dim(),t.size(),t.numel(),t.dtype,t))
使用方法:ptf_tensor(张量,张量名字或者其他标记信息)
举例:
t2=torch.tensor([[0,1,2],[3,4,5],[6,7,8]])
ptf_tensor(t2,'common')
会有如下输出:
The info of common:
#############################
@dims: 2
@size: torch.Size([3, 3])
@ele_sum: 9
@dtype: torch.int64
@data:
tensor([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
#############################
t2=torch.tensor([[0,1,2],[3,4,5],[6,7,8]])
ptf_tensor(t2,'common')
全0的,对角线是1的(单位矩阵),全部元素都是某个值的…
t=torch.zeros(3,3,1)
ptf_tensor(t,'zeros') # size(3,3,1)
t=torch.full((3,3),5.)
ptf_tensor(t,'full') # size(3,3), All elements are 5.
t=torch.eye(5)
ptf_tensor(t,'eye') # 对角线是1,其余是0 ,单位矩阵
指定最小最大值,和默认0-1
## 创建随机的张量:
t=torch.randint(low=0,high=4,size=(3,3)) #指定最大最小值
ptf_tensor(t,'randint') #创建离散分布的int类型随机数
t=torch.rand(3,3)
ptf_tensor(t,'rand') #创建 0-1之间的随机数
后面我们会经常使用torch.arange来创建示例数据调试
## 创建数列:
t=torch.arange(0,8,step=2) #差是2 的等差数列
ptf_tensor(t,'arange array')
t=torch.arange(24)
ptf_tensor(t,'default step=1') # 默认0-23 step=1
reshape必须保证元素数量一致,如24=2 ∗ * ∗ 6 ∗ * ∗ 2=12 ∗ * ∗ 2
t=torch.arange(24)
ptf_tensor(t,'before reshape')
t2=t.reshape(2,6,2)
ptf_tensor(t2,'after reshape')
squeeze可以删除多余的 dim,相反,unsqueeze可以增加新的dim
## squeeze(del) 和 unsqueeze(add)
t=torch.arange(12)
ptf_tensor(t)
t2=t.unsqueeze(dim=0)
ptf_tensor(t2,tag='t add dim=0')
t3=t.unsqueeze(dim=1)
ptf_tensor(t3,tag='t add dim=1')
t4=t3.squeeze(dim=1)
ptf_tensor(t4,tag='t del dim=1')
会有如下输出:
The info of tensor_3jC5N:
#############################
@dims: 1
@size: torch.Size([12])
@ele_sum: 12
@dtype: torch.int64
@data:
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
#############################
The info of t add dim=0:
#############################
@dims: 2
@size: torch.Size([1, 12])
@ele_sum: 12
@dtype: torch.int64
@data:
tensor([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]])
#############################
The info of t add dim=1:
#############################
@dims: 2
@size: torch.Size([12, 1])
@ele_sum: 12
@dtype: torch.int64
@data:
tensor([[ 0],
[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10],
[11]])
#############################
The info of t delete dim=1:
#############################
@dims: 1
@size: torch.Size([12])
@ele_sum: 12
@dtype: torch.int64
@data:
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
#############################
t=torch.arange(0,50,step=6)
ptf_tensor(t,'raw t')
ptf_tensor(t[3:6]) #选择index from 3 to 6
ptf_tensor(t[-2:],'from back select')
使用 index_select 函数
# 张量部分元素的选取
t=torch.arange(24).reshape(2,6,2)
index = torch.tensor([3,4]) # 选择第index=3和4的元素
ptf_tensor(t,'t')
ptf_tensor(t.index_select(1,index)) #在 dim=1 上选取
# 提示:观察【2,6,2】-->【2,2,2】
会有如下输出:
The info of t:
#############################
@dims: 3
@size: torch.Size([2, 6, 2])
@ele_sum: 24
@dtype: torch.int64
@data:
tensor([[[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17],
[18, 19],
[20, 21],
[22, 23]]])
#############################
The info of tensor_r0VpN:
#############################
@dims: 3
@size: torch.Size([2, 2, 2])
@ele_sum: 8
@dtype: torch.int64
@data:
tensor([[[ 6, 7],
[ 8, 9]],
[[18, 19],
[20, 21]]])
#############################
使用 cat 函数
# 张量的拓展和拼接
tp=torch.arange(12).reshape(3,4)
ptf_tensor(tp,'tp')
tn=-tp
ptf_tensor(tn,'tn')
tc0=torch.cat([tp,tn],dim=0) # 在dim=0 处拼接
ptf_tensor(tc0,'tc0 dim=0 cat')
tc1=torch.cat([tp,tn],dim=1) #在 dim=1 处拼接
ptf_tensor(tc1,'tc1 dim=1 cat')
会有如下输出:
The info of tp:
#############################
@dims: 2
@size: torch.Size([3, 4])
@ele_sum: 12
@dtype: torch.int64
@data:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
#############################
The info of tn:
#############################
@dims: 2
@size: torch.Size([3, 4])
@ele_sum: 12
@dtype: torch.int64
@data:
tensor([[ 0, -1, -2, -3],
[ -4, -5, -6, -7],
[ -8, -9, -10, -11]])
#############################
The info of tc0 dim=0 cat:
#############################
@dims: 2
@size: torch.Size([6, 4])
@ele_sum: 24
@dtype: torch.int64
@data:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[ 0, -1, -2, -3],
[ -4, -5, -6, -7],
[ -8, -9, -10, -11]])
#############################
The info of tc1 dim=1 cat:
#############################
@dims: 2
@size: torch.Size([3, 8])
@ele_sum: 24
@dtype: torch.int64
@data:
tensor([[ 0, 1, 2, 3, 0, -1, -2, -3],
[ 4, 5, 6, 7, -4, -5, -6, -7],
[ 8, 9, 10, 11, -8, -9, -10, -11]])
#############################