1. 获取张量大小(size & shape)
2. 统计张量的元素个数(prod & numel)
3. 重塑张量的大小(reshape)
4. 张量的压缩(squeeze & flatten)
5. 张量的拼接(cat)
6. 广播(broadcast_to)
7. 求最大值和下标(max & argmax)
首先,创建一个张量(创建张量的函数区分可见pytorch张量创建:区分Tensor & tensor & as_tensor & from_numpy)
import torch
p = torch.tensor([[1,1,1,1],[2,2,2,2],[3,3,3,3]],dtype=torch.float32)
(1) 张量的各个轴长
输入:
p.size()
p.shape
输出:
torch.Size([3,4])
torch.Size([3,4])
注:shape后面没有括号,size后面有括号
(2) 张量的维度(rank)
输入:
len(p.shape)
输出:
2
维度为2的张量其实是矩阵。
仍然使用1中的p,即:
import torch
p = torch.tensor([[1,1,1,1],[2,2,2,2],[3,3,3,3]],dtype=torch.float32)
输入:
torch.tensor(p.shape).prod()
p.numel()
第一行是创建一个p.shape作为输入的张量,然后将张量中的元素进行相乘,即可得到一个张量,其存储的是p中的元素个数。
输出:
tensor(12)
12
仍然使用2中的张量p。
输入:
p.reshape(2,6)
输出:
tensor([[1.,1.,1.,1.,2.,2.],
[2.,2.,3.,3.,3.,3.]])
仍然使用2中的张量p。利用squeeze函数将一个张量中轴长为1的维度进行压缩,如果有多个轴长为1的维度,则可以使用squeeze(i)指定压缩第i维。
输入:
print(p.reshape(1,12).squeeze().shape)
输出:
torch.Size([12])
利用压缩和重塑,可以实现flatten操作,这是由卷积层过渡到全连接层常用的过渡方法:
def flatten(p):
p = p.reshape(1,-1) #-1表示由计算获得,也就是张量在第一维的轴长是1,第2维由计算机计算决定
p = p.squeeze() #去除所有的轴,只剩下一维
return p
输入:
A = torch.ones(2,2)
B = torch.ones(1,2)
torch.cat((A,B),dim=0) #dim表示按照第0维(列)进行拼接
输出:
tensor([[1,1],
[1,1],
[1,1]])
输入:
A = torch.ones(2,2)
B = torch.tensor([1,3],dtype=float32)
np.broadcast_to(B.numpy(),A.shape)
输出:
array([[1.,3.],
[1.,3.]],dtype=float32)
输入:
A = torch.tensor([[1,0,0,2],
[2,4,5,7],
[3,0,3,10]],dtype=torch.float32)
t.max()
t.argmax()
输出:
tensor(10.)
tensor(11) #返回的是张量在flatten之后的下标(下标从0开始)