[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 通过函数参数的参数(多维数组)指明张量的维度和内容

(1)Tensor([ ])

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

(1)Tensor(x,y....)

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

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

(2)内容为全0的张量: zeros()

(3)内容为全0的张量: zeros_like()

(4)内容为全1的张量: ones()

(5)内容为全1的张量: ones_like()

(6)填充任意值:full((x,y),value)

(7)内容为随机数的张量- 均匀分布随机数:rand()

(8)内容为随机数的张量 - 正态分布随机数: normal()

(9)内容为随机数的张量 - 随机打乱一个数字序列:randperm()

(10)内容是线性、均匀分布的张量 - 指定范围与步长:range()

(11)内容是线性、均匀分布的张量 - 指定范围与元素个数:linspace()

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

3.1 Numpy Array转成PyTorch Tensor:from_numpy()

3.2 PyTorch Tensor转成Numpy Array:numpy()




第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 通过函数参数的参数(多维数组)指明张量的维度和内容

(1)Tensor([ ])

# 通过多维数组构建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 通过函数参数指明张量的维度,内容不确定

(1)Tensor(x,y....)

# 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)内容为空(不确定值)的张量: empty()

#内容为空(不填充值,值不确定)
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的张量: zeros()

# 内容为全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])

(3)内容为全0的张量: zeros_like()

# 内容为全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

(4)内容为全1的张量: ones()

# 内容为全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])

(5)内容为全1的张量: ones_like()

# 内容为全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

(6)填充任意值:full((x,y),value)

(x,y)为维度,value为填充的数值

a = torch.full((2,3),5)
print(a)

输出:

tensor([[5, 5, 5],
        [5, 5, 5]])

(7)内容为随机数的张量- 均匀分布随机数:rand()

#内容为随机数
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])

(8)内容为随机数的张量 - 正态分布随机数: normal()

#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])

(9)内容为随机数的张量 - 随机打乱一个数字序列:randperm()

#随机打乱一个数字序列。其内的参数决定了随机数的范围
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])

(10)内容是线性、均匀分布的张量 - 指定范围与步长:range()

# 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

(11)内容是线性、均匀分布的张量 - 指定范围与元素个数:linspace()

# 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:from_numpy()

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:numpy()

#把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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值