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

相关推荐
NAGNIP11 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab12 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab12 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP16 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年16 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼16 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS16 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区18 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈18 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang18 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx