目录
1.导入python计算库
2.张量的属性和方法
1)属性
2)方法
a.计算维度
b.这两种创建有啥区别
c.矩阵的加法
d.矩阵的乘法
e.索引方法
f.view操作可以改变矩阵的维度
g.转化方法(numpy与torch的相互转化),两者之间的协同操作
如果觉得对你有帮助,可以点赞收藏呢。
import torch
import numpy as np
为了方便torch的相关计算,以及torch和numpy可以相互转化
2.利用tensor的API去创建tensor格式的数据
tensor.empty(3,4,dtype=torch.float)#创建一个三行四列的tensor格式的数据
tensor([[1.1112e-38, 9.5511e-39, 1.0102e-38, 1.0286e-38, 1.0194e-38],
[9.6429e-39, 9.2755e-39, 9.1837e-39, 9.3674e-39, 1.0745e-38],
[1.0653e-38, 9.5510e-39, 1.0561e-38, 1.0194e-38, 1.1112e-38]])
tensor.zeros(3,4)#创建一个三行四列的tensor格式数值为0.的数据
tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
tensor.ones(3,4)#创建一个三行四列的tensor格式,数值为1.的数据
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
torch.rand([3,4])#创建一个三行四列的tensor格式,数值为随机数据,范围为(0,1)不包括0和1
tensor([[0.3205, 0.8217, 0.6920, 0.7952],
[0.5324, 0.2654, 0.6178, 0.3416],
[0.1683, 0.2586, 0.5454, 0.4035]])
torch.randint(low=1,high=5,size=(3,4))#创建一个大小为三行四列的数据,范围为(1,5)不包括1和5
tensor([[3, 3, 4, 1],
[2, 3, 2, 1],
[3, 1, 4, 4]])
上面的(a,b,dtype=torch.long)或者(a,b,dtype=torch.int)或者(a,b,dtype=torch.lfloat)可以表示三种不同数据类型的矩阵,其中a,b表示a行b列,表示大小(size);
而(a,b)表示a,b(a行,b列)大小矩阵(size),数据类型默认为float。
以上的创建方法比较常用。
t1=torch.empty([3,5])
tensor([[8.4817e-39, 9.6428e-39, 1.1112e-38, 9.5511e-39, 1.0102e-38],
[1.0286e-38, 1.0194e-38, 9.6429e-39, 9.2755e-39, 9.1837e-39],
[9.3674e-39, 1.0745e-38, 1.0653e-38, 9.5510e-39, 1.0561e-38]])
t1.shape
torch.Size([3, 5])#可以计算出矩阵的大小
t1.dim() #dim表示矩阵是维数,有1维的、2维的、3维的。下面的2就表示这个矩阵就是2维的
2
x=torch.tensor([5.,3])
x
tensor([5., 3.])
x=x.new_ones(5,3,dtype=torch.double)
x
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
与下面这种创建方法有什么区别呢:希望哪一位大神看了之后可以在下方留言,我感觉会是numpy类型,但是numpy的类型为dtype=float32。
torch.ones(5,3)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
分别创建两个矩阵,然后进行加法,如下:
x1=torch.ones(5,3)##创建两个矩阵
x2=torch.zeros(5,3)
x=x1+x2#两种方式都可以
x=torch.add(x1,x2)
x
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
x1=torch.ones(5,3)##创建两个矩阵
x2=torch.zeros(5,3)
x=x1*x2#两种方式都可以
x=torch.mul(x1,x2)
x
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
x[:3]#:表示取所有元素,3表示取前三行元素
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
x=torch.randn(4,4)
y=x.view(16)
z=x.view(-1,2)
m=x.view(-1,8)
print(x.size(),y.size(),z.size(),m.size())
torch.Size([4, 4]) torch.Size([16]) torch.Size([8, 2]) torch.Size([2, 8])
改变之后的结果为:
view(-1,2)中的-1表示的是自动计算。
首先是torch转化为numpy
其次是numpy转化为torch类型
我发现转化完成之后 array和tensor 数据后面都有 数据类型;而当我们用numpy和tensor创建的时候后面就不显示数据类型。