1、创建tensor数据,随机数,运算

tensor(张量)是PyTorch的一种数据类型,可以是标量、一维向量、多维矩阵等。

官网已经有介绍,总结如下:

上图中types可以不同(dtype不设定就是同类型),并没有严格界限,不过最好按推荐的情况去使用。

tensor.*中tensor就是带有数据的具体对象了,如下述案例中x、y等。

1、Tensor与tensor区别

import torch as t
x=t.Tensor(2,3) #2行3列
x=t.Tensor([2,3]) #浮点型,输出 tensor([2., 3.])
#tensor里是已存在的数据,标量、向量、矩阵等。注意与Tensor区别
x=t.tensor([2,3])  #与元素同类型,整型
x=t.tensor([2.,3.]) #浮点型

torch.Tensor()是python类,更明确地说,是默认张量类型torch.FloatTensor()的别名,torch.Tensor([1,2])会调用Tensor类的构造函数__init__,生成单精度浮点类型的张量。

torch.tensor()是函数,返回的张量类型与元素同类型

详解链接https://blog.csdn.net/tfcy694/article/details/85338745

2、torch.*

#未初始化的,里面是垃圾值
x=t.empty(2,3)
x
#类似的还有ones
x=t.zeros(2,3,dtype=t.long)
x
#[0,1]均匀分布,randn是高斯分布
x=t.rand(2,3)
x

3、torch.*_like、torch.new_*

#与x等大,类型不同(若设定)
y=t.zeros_like(x,dtype=t.float)
y
#y与x不等大,同类型(若不设定)
y=x.new_zeros(3,2)
#y.type()
#y.size()
y

 注意,如果报错,一般是因为类型不是Tensor默认的浮点型,转换下就可以了

其他总结:

import torch as t
a=t.arange(0,5,2) #步长为2的等差数列,左闭右开
b=t.linspace(0,5,3) #指定间隔范围内返回均匀间隔的数字
c1=t.randn(2,3) #标准正太分布
c2=t.rand(2,3) #0-1的均匀随机分布
d=t.randperm(3) #长度为3的随机排列,从0开始
e=t.eye(2,3) #对角线为1的矩阵,行列数可以不一致
print("a",a)
print("b",b)
print("c1",c1)
print("c2",c2)
print("d",d)
print("e",e)

view调整形状:

a=t.arange(0,6) 
print(a)
b=a.view(2,-1) #调整形状,-1自动计算列数。注意b与a同一内存
print(b)
c=b.view(1,1,2,-1) #2维变4维
print(c)
c.size()

索引:

a=t.randn(3,4)
a[0] #第1行
a[:,0] #第1列
a[0,2] #第1行3列的元素
a[0,-1] #第1行最后1列的元素
a[:2] #前2行,左闭右开,即0、1行
#都是第1行前2列,但形状不同
print(a[0,:2])  #1维
print(a[0:1,:2]) #2维,1*2

x=t.arange(0,27).view(3,3,3) #3*3*3
x[[1,2],[1,2],[2,0]] # x[[1,1,2],[2,2,0]]
x[[2,1,0],[0],[1]] #x[[2,0,1],[1,0,1],[0,0,1]]

按条件选取元素

a=t.randn(3,4)
a[a>1] #选取大于1的元素
a[a!=0]

 tensor函数

a=t.arange(0.,6.).view(2,-1) #注意浮点型
t.cos(a) #余弦,整型会报错
t.fmod(a,3) #取余,a%3
t.pow(a,2) #次幂,a**2
t.clamp(a,min=3) #低于3的置为3
t.clamp(a,min=2,max=4) #低于2的置为2,高于4的置为4
#类似函数还有,abs、sqrt、ceil/round/floor/trunc上取整/四舍五入/下取整/只留整数部分

归并操作:

mean/sum/median/mode 均值/和/中位数/众数
norm/dist 范数/距离
std/var 标准差/方差
cumsum/cumprod 累加/累乘

以上函数大多有dim这个参数,dim设置规律如下:

对于形状(m,n,k),

dim=0,则输出形状(1,n,k)或(n,k)

dim=1,则输出形状(m,1,k)或(m,k)

dim=2,则输出形状(m,n,1)或(m,n)

 有无1,取决于参数keepdim,keepdim=True则保留维度1,默认是False。

b=t.ones(2,3)
print(b.sum(dim=0,keepdim=True)) #1*3,二维
print(b.sum(dim=0)) #3,注意不是1*3,一维
print(b.sum(dim=1)) #对于二维矩阵:dim=0累加列。dim=1累加行。

 矩阵运算:

 注意,转置会使得内存空间不连续。

a=t.linspace(0,15,6).view(2,-1)
b=a.t()
print(b.is_contiguous()) #转置后b的内存空间是不连续的
c=b.contiguous() #重新分配新的连续的空间c,b依然是不连续的。
print(b.is_contiguous())
print(c.is_contiguous())

 

其他参考 http://studyai.com/pytorch-1.4/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor-tutorial-py

posted @ 2020-04-03 11:51  夕西行  阅读(1429)  评论(0编辑  收藏  举报