本文介绍PyTorch创建张量的三种方式,分别为直接创建、依据数值创建以及依据概率创建。
1.直接创建
1.1 使用数组创建
1.1.1 语法:
1.1.2 说明:
1.1.3 程序:
arr=np.ones((3,3))
print("arr的数据类型为:"+str(arr.dtype))
t=torch.tensor(arr)
print(t)
1.1.4运行结果:
1.2 使用numpy创建
1.2.1 语法:
1.2.2说明:
1.2.3 程序:
arr=np.array([[1,2,3],[4,5,6]])
t=torch.from_numpy(arr)
print(t)
1.2.4结果:
1.2.5探究内存共享机制:
修改array的内存中数字,查看tensor是否发生改变:
arr=np.array([[1,2,3],[4,5,6]])
t=torch.from_numpy(arr)
arr[0,0]=0
print(t)
结果如下:第[0,0]位数值发生可改变。
修改tensor的内存数值,查看array是否发生改变:
arr=np.array([[1,2,3],[4,5,6]])
t=torch.from_numpy(arr)
t[0,0]=-1
print(arr)
结果如下:改变张量的[0,0]号位数值,与其对应的array数组[0,0]也发生变化:
2.依据数值创建
2.1创建全0张量
2.1.1 语法:
2.1.2 说明:
2.1.3 程序:
t=torch.zeros((3,2))
print(t)
其结果是一个3*2的全零矩阵,而当其size的参数为三个时,实验结果表明:第一个数值为维度数,后面两个数值分别为行数和列数。
t=torch.zeros((3,2,3))
print(t)
2.2zeros_like()创建全0张量
2.2.1 语法:
2.2.2说明:
2.2.3程序:
t=torch.zeros((3,2,3))
t1=torch.zeros_like(t)
print(t1)
重点:这里input的类型,不能是元组,而应该是tensor形式,上述,我们使用了t作为input输入。
2.3 full()和full_like()填充数值
2.3.1语法:
2.3.2说明:
2.3.3程序:
t=torch.full((2,3),1)
print(t)
结果:
其中,(2,3)表示构建一个2*3的举证,并且全部填充为1。
t=torch.zeros((3,2,3))
t1=torch.full_like(t,1)
print(t1)
这里和zeros_like()函数一样,input的输入类型也是tensor类型,对代码进一步解析:t继承了3维度,2*3行列的矩阵样式;因此t1也是这种类型,随后全部被填充为1。
2.4 创建等差1维张量
2.4.1语法:
2.4.2说明:
2.4.3程序:
t=torch.arange(1,10,2)
print(t)
这里参数需要注意的是:[start,end)表示为起始数值包含在内,而终止数值不包含在内。2为步长。
2.5创建均分1维张量
2.5.1 语法:
2.5.2说明:
2.5.3程序:
t=torch.linspace(1,10,3)
print(t)
这里起始和终止的条件为闭区间,即:[start,end]。将这个闭区间均分的个数,这里均分为三分。同理,还可以将其均分为6份,7份等等。
2.6创建对数均分1维张量
2.6.1语法:
2.6.2说明:
2.6.3程序:
t=torch.logspace(1,10,5,10.0)
print(t)
结果:
其中10.0为底数。
2.7创建对角矩阵
2.7.1语法:
2.7.2说明:
2.7.3程序:
t=torch.eye(3,3)
print(t)
结果:
3.依据概率分布创建
3.1创建正态随机分布张量
3.1.1语法:
3.1.2说明:
3.1.3程序:
mean=torch.arange(1,10,dtype=torch.float)
std=torch.arange(1,10,dtype=torch.float)
print("mean:"+str(mean))
print("std:"+str(std))
t=torch.normal(mean=mean,std=std)
print(t)
结果:
说明:这里dtype=torch.float不可缺少,否则会报错:_th_normal not supported on CPUType for Long。这里mean表示均值,std表示标准差。因此该程序可以理解为创建1维度的张量,其第1个值为取自均值为1,标准差为1的正态分布中一个随机值,第2个值取值均值为2,标准差为2的正态分布中一个随机值…
3.2创建标准正态分布张量
3.2.1语法:
3.2.2说明:
3.2.3程序:
t=torch.randn(2,3)
print(t)
程序表明,从标准正态分布(均值为0,方差为 1,即高斯白噪声)中抽取一组随机数组成1维张量,其大小为2*3。
t=torch.zeros((3,2,2))
t1=torch.randn_like(t)
print(t1)
3.3 创建均匀分布张量
3.3.1 语法:
3.3.2 说明:
3.3.3 程序:
t=torch.rand(2,3)
print(t)
t=torch.zeros((2,4))
t1=torch.rand_like(t)
print(t1)
源码获取
关注公众号,回复:张量