[PyTroch系列-4]:PyTorch基础 - 张量(Tensor)的创建方法

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PyTroch系列-4]:PyTorch基础 - 张量(Tensor)的创建方法相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119424611


目录

第1部分 前置条件

1.1 导入库及检查版本

1.2 Hello World

第2部分 创建普通Tensor实例的代码示例

2.1 通过函数参数的参数(多维数组)指明张量的维度和内容

2.2 通过函数参数指明张量的维度,内容不确定

2.3 通过函数的参数指明张量的维度,通过函数名指明张量的内容

第3部分  PyTorch Tensor与Numpy Array的相互转换的实例

3.1 Numpy Array转成PyTorch Tensor

3.2 PyTorch Tensor转成Numpy Array



第1部分 前置条件

1.1 导入库及检查版本

import numpy as np
import torch

1.2 Hello World

print("Hello World")

print(torch.__version__)

print(torch.cuda.is_available())

第2部分 创建普通Tensor实例的代码示例

2.1 通过函数参数的参数(多维数组)指明张量的维度和内容

# 通过多维数组构建numpy array
a = np.array([[1,2], [3,4]])  
print(a)
print(a.shape)

输出:
[[1 2]
 [3 4]]
(2, 2)
#直接构建Tensor内容和维度,内容数据是确定的
a = torch.Tensor([[1,2], [3,4]])  
print(a)
print(a.shape)      #tensor的维度

2.2 通过函数参数指明张量的维度,内容不确定

# torch.Tensor:
# 所有的参数都是维度参数
a = torch.Tensor(2,3)         #指定Tensor的维度参数,内容数据是不确定的
print(a)
print(a.type())
print(a.shape)    

a = torch.Tensor(2,3,5)         #指定Tensor的维度参数,内容数据是不确定的
print(a)
print(a.type())
print(a.shape)    
tensor([[4.4157e-05, 2.1864e+23, 2.1769e+23],
        [1.0325e-08, 1.0315e-08, 2.1762e-04]])
torch.FloatTensor
torch.Size([2, 3])
tensor([[[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
         [0.0000e+00, 0.0000e+00, 0.0000e+00, 1.4013e-45, 0.0000e+00],
         [8.4078e-45, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]],

        [[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
         [1.4013e-45, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
         [0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]]])
torch.FloatTensor
torch.Size([2, 3, 5])

2.3 通过函数的参数指明张量的维度,通过函数名指明张量的内容

(1)内容为空(不确定值)的张量

#内容为空(不填充值,值不确定)
a = torch.empty(2, 3)
print(a)
print(a.type())
print(a.shape)   

print("\\n")

a = torch.empty(2, 3, 5)
print(a)
print(a.type())
print(a.shape)   
tensor([[1.4013e-45, 8.4078e-45, 1.4013e-45],
        [8.4078e-45, 9.1844e-41, 1.0748e-42]])
torch.FloatTensor
torch.Size([2, 3])


tensor([[[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
         [0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
         [0.0000e+00, 0.0000e+00, 1.4013e-45, 0.0000e+00, 0.0000e+00]],

        [[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
         [0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.4013e-45],
         [0.0000e+00, 9.1845e-41, 1.0748e-42, 1.4013e-45, 1.4013e-45]]])
torch.FloatTensor
torch.Size([2, 3, 5])

(2)内容为全0的张量

# 内容为全0, 形状维度来自于参数
a = torch.zeros(2,3)
print(a)
print(a.type())
print(a.shape)  

print("\\n")

a = torch.zeros(2,3,5)
print(a)
print(a.type())
print(a.shape) 
#输出:

tensor([[0., 0., 0.],
        [0., 0., 0.]])
torch.FloatTensor
torch.Size([2, 3])


tensor([[[0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0.]],

        [[0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0.],
         [0., 0., 0., 0., 0.]]])
torch.FloatTensor
torch.Size([2, 3, 5])

# 内容为全0,形状维度来自其他张量
b = torch.ones(2,3)
print(b)

print("\\n")

a = torch.zeros_like(b)
print(a)
print(a.type())
tensor([[1., 1., 1.],
        [1., 1., 1.]])


tensor([[0., 0., 0.],
        [0., 0., 0.]])
torch.FloatTensor

(3)内容为全1的张量

# 内容为全1,维度来自参数
a = torch.ones(2,3)
print(a)
print(a.type())
print(a.shape)  

print("\\n")

a = torch.ones(2,3,5)
print(a)
print(a.type())
print(a.shape)  

输出:

tensor([[1., 1., 1.],
        [1., 1., 1.]])
torch.FloatTensor
torch.Size([2, 3])


tensor([[[1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1.]],

        [[1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1.],
         [1., 1., 1., 1., 1.]]])
torch.FloatTensor
torch.Size([2, 3, 5])
# 内容为全1,维度来自其他张量
b = torch.zeros(2,3)
print(b)

print("\\n")

a = torch.ones_like(b)
print(a)
print(a.type())
#输出:

tensor([[0., 0., 0.],
        [0., 0., 0.]])


tensor([[1., 1., 1.],
        [1., 1., 1.]])
torch.FloatTensor

(4)内容为随机数的张量

  • 均匀分布随机数
#内容为随机数
a = torch.rand(6) 
print(a)

a = torch.rand(2,3) 
print(a)

print(a.type())
print(a.shape)  
#输出:

tensor([0.5125, 0.9256, 0.3287, 0.2118, 0.0471, 0.4917])
tensor([[0.7103, 0.0490, 0.7401],
        [0.7260, 0.2599, 0.9681]])
torch.FloatTensor
torch.Size([2, 3])
  • 正态分布随机数
#mean: 均值
#std: 标准差
a = torch.normal(mean=0.0, std=torch.rand(5))
print(a)
print(a.type())
print(a.shape)  
#输出:

tensor([ 0.4378, -0.0869, -0.1054,  0.1447,  0.2430])
torch.FloatTensor
torch.Size([5])
  • 随机打乱一个数字序列
#随机打乱一个数字序列。其内的参数决定了随机数的范围
a = torch.randperm(11)
print(a)
print(a.type())
print(a.shape)  
输出:

tensor([ 0,  9,  1,  5, 10,  2,  4,  6,  3,  8,  7])
torch.LongTensor
torch.Size([11])

(5)内容是线性、均匀分布的张量

  • 指定范围与步长
# range(m,n,step)
# 产生从[0,n]的一个等间距序列,包括n,这与Python不同。
# 第1个参数为起点,
# 第2个参数为终点,
# 第3个参数为步长,默认为1
a = torch.range(0,9)  
print(a)

a = torch.range(0,9,2)  
print(a)
print(a.type())
输出:

tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
tensor([0., 2., 4., 6., 8.])
torch.FloatTensor

  • 指定范围与元素个数
# linspace(m,n,z) 
# 产生从[0,n]的一个等间距数字序列,包括n,这与Python不同。
# 第1个参数为起点,默认为0。
# 第2个参数为步长,默认为1
a = torch.linspace(0,9,10)  #等间距均匀分布的序列: 最后一个参数为序列的个数
print(a)
print(a.type())
输出:

tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
torch.FloatTensor

第3部分  PyTorch Tensor与Numpy Array的相互转换的实例

3.1 Numpy Array转成PyTorch Tensor

a = np.array([[1,2,3 ], [4,5,6]])  
print("****************")
print(a)
print(a.size)
print(a.shape)
#把numpy数组转换成torch张量
b = torch.from_numpy(a)

#原先的numpy数组不变
print("****************")
print(a)
print(a.size)
print(a.shape)

#生成一个新的torch张量
print("****************")
print(b)
print(b.size())
print(b.shape)
输出结果:

****************
[[1 2 3]
 [4 5 6]]
6
(2, 3)
****************
[[1 2 3]
 [4 5 6]]
6
(2, 3)
****************
tensor([[1, 2, 3],
        [4, 5, 6]], dtype=torch.int32)
torch.Size([2, 3])
torch.Size([2, 3])

3.2 PyTorch Tensor转成Numpy Array

#把tensor转换成numpy array
c = b.numpy()

print("****************")
print(b)
print(b.size())
print(b.shape)

print("****************")
print(c)
print(c.size)
print(c.shape)
输出结果

****************
tensor([[1, 2, 3],
        [4, 5, 6]], dtype=torch.int32)
torch.Size([2, 3])
torch.Size([2, 3])
****************
[[1 2 3]
 [4 5 6]]
6
(2, 3)

作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119424611

以上是关于[PyTroch系列-4]:PyTorch基础 - 张量(Tensor)的创建方法的主要内容,如果未能解决你的问题,请参考以下文章

[PyTroch系列-13]:PyTorch基础 - 张量的操作 - 筛选过滤

[PyTroch系列-7]:PyTorch基础 - 张量Tensor的算术运算

[PyTroch系列-5]:PyTorch基础 - 稀疏矩阵与其创建方法

[PyTroch系列-11]:PyTorch基础 - 张量Tensor元素的排序

[PyTroch系列-17]:PyTorch基础 - 张量的索引与切片

[PyTroch系列-15]:PyTorch基础 - 张量的操作 - 拆分与分割