【深度学习入门】什么是张量?如何访问张量中的元素?如何对张量中的数据进行赋值?
创始人
2024-11-26 12:05:58
0

数据操作

  • 数据操作
    • 创建数组
  • 访问元素
    • 赋值
      • 单数赋值
      • 按区域赋值

数据操作

在实现数据操作之前需要了解一些定义:
张量:张量表示一个由数值组成的数组,这个数组可能有多个维度。
0-d(0维数组)为标量
1-d(1维数组)为向量
2-d(2维数组)为矩阵
……
在这里插入图片描述在这里插入图片描述

创建数组

在这里插入图片描述
要创建一个向量:

x = torch.arange(12) print(x) 

结果:

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

通过shape属性来访问张量的形状和其中元素的总数:

print(x.shape) print(x.numel()) 

结果:

torch.Size([12]) 12 

要想改变一个张量的形状而不改变元素数量和元素值,可以调用reshape函数,可以看到他变成了一个三行四列的张量:

X = x.reshape(3, 4) print(X) 

结果:

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

使用全0、全1、其他常量,或者从特定分布中随机采样的数字:

print(torch.zeros(2, 3, 4)) print(torch.ones(2, 3, 4)) 

结果:

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

通过提供包含数值的Python列表(或嵌套列表),来为所需张量中的每个元素赋予确定值。

print(torch.tensor([[[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]]).shape) 

结果:

torch.Size([1, 3, 4]) 

常见的标准算术运算符(+、-、*、/和**)都可以被升级为按元素运算。

x = torch.tensor([1.0, 2, 4, 8]) y = torch.tensor([2, 2, 2, 2]) print(x + y, x - y, x * y, x / y, x ** y) 

结果:

tensor([ 3.,  4.,  6., 10.]) tensor([-1.,  0.,  2.,  6.]) tensor([ 2.,  4.,  8., 16.]) tensor([0.5000, 1.0000, 2.0000, 4.0000]) tensor([ 1.,  4., 16., 64.]) 

我们也可以把多个张量连结(concatenate)在一起 dim=0代表按行合并,dim=1代表按列合并,以此类推:

X = torch.arange(12,dtype=torch.float32).reshape((3, 4)) Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]) print(torch.cat((X, Y), dim=0)) print(torch.cat((X, Y), dim=1)) 

结果:

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

可以通过比较,看两个张量中相同的部分

print(X == Y) 

结果:

tensor([[False,  True, False,  True],         [False, False, False, False],         [False, False, False, False]]) 

可以计算所有的向量
print(X.sum())
结果:
tensor(66.)

访问元素

在这里插入图片描述

赋值

X[1, 2] = 9 print(X) X[0:2, :] = 12 print(X) 

结果:

tensor([[ 0.,  1.,  2.,  3.],         [ 4.,  5.,  9.,  7.],         [ 8.,  9., 10., 11.]]) tensor([[12., 12., 12., 12.],         [12., 12., 12., 12.],         [ 8.,  9., 10., 11.]]) 

在维度相同但形状不同的情况下,即使形状不同,我们仍然可以通过调用 广播机制(broadcasting mechanism)来执行按元素操作,该机制通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状之后再对生成的数组执行按元素操作。

 a = torch.arange(3).reshape((3, 1)) b = torch.arange(2).reshape((1, 2)) print(a) print(b) # 由于a和b分别是3*1和1*2矩阵,如果让它们相加,它们的形状不匹配。 # 矩阵广播机制将会将其化为一个更大的3*2矩阵,如下所示:矩阵a将复制列,矩阵b将复制行,然后再按元素相加。 print(a + b) 

结果:

tensor([[0],         [1],         [2]]) tensor([[0, 1]]) tensor([[0, 1],         [1, 2],         [2, 3]]) 

单数赋值

使X的第2行第3列变为9

X[1, 2] = 9 print(X) 

结果:

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

按区域赋值

让矩阵的前两行和所有列的值都改为12:

X[0:2, :] = 12 print(X) 

结果:

tensor([[12., 12., 12., 12.],         [12., 12., 12., 12.],         [ 8.,  9., 10., 11.]]) 

张量转换为NumPy张量

A = X.numpy() B = torch.tensor(A) print(type(A)) print(type(B)) 

结果:

  

将大小为1的张量转换为标量

a = torch.tensor([3.5]) print(a,a.item,float(a),int(a)) 

结果:

tensor([3.5000]) 3.5 3.5 3 

相关内容

热门资讯

据了解!wejoker免费脚本... 据了解!wejoker免费脚本,wepoker有辅助工具吗(透视)策略脚本(切实是真的挂)-哔哩哔哩...
长期以来!德州辅助工具到底怎么... 长期以来!德州辅助工具到底怎么样,wepokerh5破解(透视)教程书教程(原来有挂)1)德州辅助工...
一直以来!樱花之盛有没有挂,麻... 您好,樱花之盛有没有挂这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多玩...
透视软件!凑一桌游戏关春天辅助... 透视软件!凑一桌游戏关春天辅助,微信微乐小程序有窍门吗(开挂)真是有挂(有挂教程)-哔哩哔哩1、下载...
据通报!aapoker透视方法... 据通报!aapoker透视方法,aapoker辅助器怎么用(透视)要领脚本(真是有挂)-哔哩哔哩aa...
有了最新消息!微乐河北自建房脚... 有了最新消息!微乐河北自建房脚本免费入口,大菠萝辅助器(透视)器-好像真的有挂小薇(辅助器软件下载)...
今天下午!wepoker科技辅... 今天下午!wepoker科技辅助器,如何下载德普之星辅助软件(透视)模块教程(一直真的有挂)1、下载...
透视模拟器!贪玩互娱辅助,微信... 透视模拟器!贪玩互娱辅助,微信微乐游戏辅助器(开挂)一贯存在有挂(有挂规律)-哔哩哔哩透视模拟器!贪...
昨日!wpk插件,有哪些免费的... 昨日!wpk插件,有哪些免费的wpk透视码(透视)教材脚本(切实真的有挂)-哔哩哔哩1、超多福利:超...
有了最新消息!hhpoker脚... 有了最新消息!hhpoker脚本,wepoker私人局透视插件(透视)方针教程(好像有挂)1、全新机...