1、张量的基本操作
张量默认创建int64(长整型)类型,整数型的数组默认创建int32(整型)类型,即先用np创建数组,再转换为tensor格式,数据类型即为int32类型。
张量类型可以指定
eg:
torch.tensor([1.1, 2.7], dtype = torch.int16) # 创建int16整型张量
tensor中列表几层就是几维。
flatten拉平:将任意维度张量转化为一维张量。
张量索引出来的结果还是零维张量,而不是单独的数,要转换为单独的数,需要使用item()方法。
张量的合并操作:
拼接函数:cat
a = torch.zeros(2,3)
b = torch.ones(2,3)
torch.cat([a,b])
tensor([[0., 0., 0.],
[0., 0., 0.],
[1., 1., 1.],
[1., 1., 1.]])
堆叠函数:stack
和拼接不同,stack是将各堆叠对象封装到一个更高维度的张量里,参与堆叠的张量必须形状完全相同。
a = tensor([[0., 0., 0.],
[0., 0., 0.]])
b = tensor([[1., 1., 1.],
[1., 1., 1.]])
c = torch.stack([a, b]) # 堆叠之后,生成一个三维张量
c = tensor([[[0., 0., 0.],
[0., 0., 0.]],
[[1., 1., 1.],
[1., 1., 1.]]])
张量维度变换:降维用squeeze,升维用unsqueeze
.squeeze()只能从数组的形状中删除单维度条目,即把shape中为1的维度去掉,多个维度1可以一次删除完。
torch的广播机制是将较小的数组“广播”至较大的数组,需要满足以下前提条件:
1-每个张量至少有一个维度
2-迭代维度尺寸时,从尾部的维度开始,维度尺寸需满足:相等/至少其中一个数组的某一维度为1/其中一个数组不存在该维度。
import torch
# 示例1:相同形状的张量总是可广播的,因为总能满足以上规则。
x = torch.empty(5, 7, 3)
y = torch.empty(5, 7, 3)
# 示例2:不可广播( a 不满足第一条规则)。
a = torch.empty((0,))
b = torch.empty(2, 2)
# 示例3:m 和 n 可广播:
m = torch.empty(5, 3, 4, 1)
n = torch.empty( 3, 1, 1)
# 倒数第一个维度:两者的尺寸均为1
# 倒数第二个维度:n尺寸为1
# 倒数第三个维度:两者尺寸相同
# 倒数第四个维度:n该维度不存在
# 示例4:不可广播,因为倒数第三个维度:2 != 3
p = torch.empty(5, 2, 4, 1)
q = torch.empty( 3, 1, 1)
排序运算:sort
升序 torch.sort()
降序,参数赋值
torch.sort(t,descending=True)
参考链接: