PyTorch的10个基本张量操作

PyTorch是一个基于python的科学计算包。它的灵活性允许轻松集成新的数据类型和算法,并且框架也是高效和可扩展的,下面我们将介绍一些Pytorch的基本张量操作。

Tensors

张量Tensors是一个向量,矩阵或任何n维数组。这是深度学习的基本数据结构,它们非常类似于数组和矩阵,我们可以通过它们有效地对大型数据集进行数学运算。张量可以表示为矩阵,也可以表示为矢量、标量或高维数组。

我们可以把张量想象成一个包含标量或其他数组的简单数组。在PyTorch上,张量是一个非常类似于ndarry的结构,不同之处在于它们能够在GPU上运行,这极大地加快了计算过程。

1、 tensor()

我们一般都会使用tensor()方法创建张量:

复制代码
 torch.tensor([[3, 6], [2, 4.]])
 tensor([[3., 6.],
         [2., 4.]])

这里要保证传递的python数组维度是相同的,例如下面就会报错

复制代码
 torch.tensor([[1, 2], [3, 4, 5]]) 

2、randint ()

randint()方法返回一个张量,其中充满了给定形状在低(包含)和高(不包含)之间均匀分布的随机整数。形状它可以是一个元组或包含非负成员的列表。low的默认值是0。当只传递一个int参数时,默认情况下low获取值0,high获取传递的值。

复制代码
 torch.randint(2,5, (2,2)) 
 tensor([[2, 4],
         [2, 4]])

3、complex()

complex()方法接受两个参数(real和image)并返回一个复数张量,复数实部real,虚部image,其中实部和虚部都是具有相同数据类型和相同形状的张量。

复制代码
 a_real = torch.rand(2, 2) 
 print(a_real) 
 a_imag = torch.rand(2, 2) 
 print(a_imag) 
 a_complex_tensor = torch.complex(a_real, a_imag) 
 print(a_complex_tensor)
 
 tensor([[0.4356, 0.7506],
         [0.5335, 0.6262]])
 tensor([[0.1342, 0.0804],
         [0.2047, 0.0685]])
 tensor([[0.4356+0.1342j, 0.7506+0.0804j],
         [0.5335+0.2047j, 0.6262+0.0685j]])

如果实部和虚部形状不同则会报错:

复制代码
 real = torch.rand(1, 2) 
 print(real) 
 imag = torch.rand(0) 
 print(imag) 
 complex_tensor = torch.complex(real, imag) 
 print(complex_tensor)

4、reshape()

reshape可以更改张量形状,它返回与指定数组相同的数据,但具有不同的指定维度大小。

复制代码
 a = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8])
 print(a) 
 print(a.reshape([4, 2]))
 
 tensor([1, 2, 3, 4, 5, 6, 7, 8])
 tensor([[1, 2],
         [3, 4],
         [5, 6],
         [7, 8]])

如果维度不匹配则会报错

复制代码
 a = torch.tensor([[1,2,3],[4,5,6]])
 torch.reshape(a, (6))

5、view()

view()用于在二维格式行和列中更改张量。我们必须指定要行数和列数。

复制代码
 a=torch.FloatTensor([24, 56, 10, 20, 30,                      
                     40, 50, 1, 2, 3, 4, 5])  
 
 print(a)
 print(a.view(4, 3))
 
 tensor([24., 56., 10., 20., 30., 40., 50.,  1.,  2.,  3.,  4.,  5.])
 tensor([[24., 56., 10.],
         [20., 30., 40.],
         [50.,  1.,  2.],
         [ 3.,  4.,  5.]])

reshape

复制代码
view

都是用于改变张量形状的操作,但它们之间有一些关键的区别。

**

复制代码
view

:**

  • view是一个对张量进行重新视图的方法。
  • 它返回一个新的张量,该张量与原始张量共享相同的数据,但形状可能发生改变。
  • view操作要求新形状的元素数量必须与原张量相同,否则会引发错误。
  • view可以用于改变张量形状,但仅当原始张量的数据在内存中是连续的时候。

**

复制代码
reshape

:**

  • reshape函数也用于改变张量形状。
  • view不同,reshape返回一个新的张量,而不共享原张量的数据。它总是返回一个新的张量,即使数据在内存中是连续的。
  • reshape允许在元素数量相同的情况下改变形状,因为它可以自动推断缺失的维度大小。

6、take()

take会根据给定的索引选择张量并返回。输入张量被看作是一维张量。结果的形状与指标的形状相同

复制代码
 a = torch.tensor([[1,2,3],
                   [3, 4,7],
                   [4,5,6]])
 torch.take(a, torch.tensor([1,4,5]))
 
 tensor([2, 4, 7])

如果索引超过了张量的长度则会报错

复制代码
 a = torch.tensor([[1,2,3],
                   [3, 4,7],
                   [4,5,6]])
 torch.take(a, torch.tensor([0,3,6,8,10]))

7、unbind()

unbind可以用来移除一个张量维度。它将返回一个元组,包含给定维度上的所有切片,也就是说会将张量变成一个张量的列表

复制代码
 a = torch.tensor([[1,2,3],
                   [3, 4,7],
                   [4,5,6]])
 torch.unbind(a)
 
 (tensor([1, 2, 3]), tensor([3, 4, 7]), tensor([4, 5, 6]))

8、 reciprocal()

reciprocal返回一个新的张量与输入元素的倒数。

复制代码
 torch.reciprocal(torch.tensor([[1.6,2.5],[3,4],[5,6]]))
 
 tensor([[0.6250, 0.4000],
         [0.3333, 0.2500],
         [0.2000, 0.1667]])

9、t ()

转置是翻转张量轴的过程。它涉及到交换二维张量的行和列,或者更一般地说,交换任何维度张量的轴。

复制代码
 E = torch.tensor([ [3, 8], [5, 6]])
 F = torch.t(E)
 print(E)
 print(F)
 tensor([[3, 8],
         [5, 6]])
 tensor([[3, 5],
         [8, 6]])

10、cat()

张量运算中的cat是将两个或多个张量沿特定维度连接起来形成一个更大张量的过程。得到的张量有一个新的维度,它是输入张量的原始维度的连接。

复制代码
 a = torch.tensor([[1, 2], [3, 4]])
 b = torch.tensor([[5, 6]])
 
 c = torch.cat((a, b), dim=0)
 print(c)
 
 tensor([[1, 2],
         [3, 4],
         [5, 6]])

https://avoid.overfit.cn/post/3d344b08f8c1454b869ba222079e4ea7

相关推荐
小天才才几秒前
前沿论文汇总(机器学习/深度学习/大模型/搜广推/自然语言处理)
人工智能·深度学习·机器学习·自然语言处理
l木本I4 分钟前
大模型低秩微调技术 LoRA 深度解析与实践
python·深度学习·自然语言处理·lstm·transformer
新加坡内哥谈技术31 分钟前
Meta计划借助AI实现广告创作全自动化
运维·人工智能·自动化
西猫雷婶1 小时前
pytorch基本运算-导数和f-string
人工智能·pytorch·python
Johny_Zhao1 小时前
华为MAAS、阿里云PAI、亚马逊AWS SageMaker、微软Azure ML各大模型深度分析对比
linux·人工智能·ai·信息安全·云计算·系统运维
顽强卖力1 小时前
第二十八课:深度学习及pytorch简介
人工智能·pytorch·深度学习
述雾学java1 小时前
深入理解 transforms.Normalize():PyTorch 图像预处理中的关键一步
人工智能·pytorch·python
武子康1 小时前
大数据-276 Spark MLib - 基础介绍 机器学习算法 Bagging和Boosting区别 GBDT梯度提升树
大数据·人工智能·算法·机器学习·语言模型·spark-ml·boosting
要努力啊啊啊1 小时前
使用 Python + SQLAlchemy 创建知识库数据库(SQLite)—— 构建本地知识库系统的基础《一》
数据库·人工智能·python·深度学习·自然语言处理·sqlite
武子康1 小时前
大数据-277 Spark MLib - 基础介绍 机器学习算法 Gradient Boosting GBDT算法原理 高效实现
大数据·人工智能·算法·机器学习·ai·spark-ml·boosting