pytorch基础知识Tensor算术运算

1、Tensor的基本概念

标量是零维的张量,向量是一维的张量,矩阵是二维的张量

2、Tensor的创建

import torch

"""常见的几个tensor创建"""
a = torch.Tensor([[1,2],[3,4]]) #2行2列的
print(a, a.type())  
print(torch.ones(2,3)) #2行3列全为1的
print(torch.eye(2,3))  #2行3列对角线是1,其余是0
print(torch.zeros(2,3)) #2行3列全为0
print(torch.zeros_like(a)) #2行2列全为0,与a结构一致


"""生成随机的tensor"""
b = torch.rand(2,2)
print(b, b.type())
"""生成正态分布tensor"""
c = torch.normal(mean=0.0, std=torch.rand(5))
print(c, c.type())

d = torch.normal(mean=torch.rand(5), std=torch.rand(5))
print(d, d.type())

"""生成均匀分布的tensor"""
e = torch.Tensor(2,2).uniform_(-1,1)
print(e, e.type())

"""生成序列"""
f = torch.arange(0, 10, 1)
print(f, f.type())

g = torch.linspace(2, 10, 4) #拿到等间隔的4个数字
print(g, g.type())
3、Tensor的属性

torch.dtype

torch.device 代表Tensor创建之后所存储的设备

torch.layout 表示Tensor内存布局的对象(稠密、稀疏张量)

3.1 定义稀疏的张量

torch.sparse_coo_tensor  coo元素表示非零元素的坐标形式

import torch

dev = torch.device('cpu')
# dev = torch.device('cuda')

# i非0元素坐标,v非0元素值
i = torch.tensor([[0, 1, 2], [0, 1, 2]])
v = torch.tensor([1, 2, 3])
# 稀疏的张量
a = torch.sparse_coo_tensor(i, v, (4,4), dtype=torch.float32, device=dev)

# 将稀疏的张量转化为稠密的张量
b = a.to_dense()  

print(a)
print("------------------------------------------------")
print(b)


#  打印结果
tensor(indices=tensor([[0, 1, 2],
                       [0, 1, 2]]),
       values=tensor([1., 2., 3.]),
       size=(4, 4), nnz=3, layout=torch.sparse_coo)
------------------------------------------------
tensor([[1., 0., 0., 0.],
        [0., 2., 0., 0.],
        [0., 0., 3., 0.],
        [0., 0., 0., 0.]])
4、Tensor算术运算
4.1 加法
a + b
torch.add(a, b)
a.add(b)
a.add_(b) #会将结果赋值给a
4.2 减法
a - b
torch.sub(a, b)
a.sub(b)
a.sub_(b) #会将结果赋值给a
4.3 乘法
# 哈达玛积,对应元素相乘
a * b
torch.mul(a, b)
a.mul(b)
a.mul_(b) #会将结果赋值给a
4.4 除法
a / b
torch.div(a, b)
a.div(b)
a.div_(b) #会将结果赋值给a
4.5 矩阵运算
a = torch.ones(2,1)
b = torch.ones(1,2)
torch.mm(a, b)
torch.matmul(a, b)
a @ b
a.mm(b)
a.matmul(b)

 对于高维度的Tensor(dim>2),定义其矩阵乘法仅在最后的两个维度上,要求前面的维度必须保持一致, 运算操作只有torch.matmul()

a = torch.ones(1, 2, 3, 4)
b = torch.ones(1, 2, 4, 3)
print(a.matmul(b))
4.6 Tensor幂运算
torch.pow(a, 2)
a.pow(2)
a**2
a.pow_(2)

torch.exp(a) #e的n次方
a.exp_()
4.7 Tensor开平方运算
a.sqrt()
a.sqrt_()
4.8 Tensor对数运算
torch.log(a) #底数是e
torch.log_(a)
torch.log2()
torch.log10()
4.9 pytorch in-place概念,即 “就地操作”,不允许使用临时变量,也称为原位操作

比如以下运算:

x = x + y

sub_、add_、div_、mul_等

4.10 Tensor的广播机制 张量参数可以自动扩展为相同大小

广播机制需要满足两个条件:

1、每个张量至少有一个维度

2、满足右对齐,a+b ,即

a = torch.rand(2,3)
b = torch.rand(3)
print(a+b)  #可以相加,从右向左,b的维度3,那么a的维度要么是3,要么是1

a = torch.rand(2,1)
b = torch.rand(3)
print(a+b)  #可以相加


a = torch.rand(2,4)
b = torch.rand(3)
print(a+b) #从右向左,b的维度3与a的维度4无法对齐,报错
4.11 Tensor的取余数、取整数
a = torch.rand(2,2)
a = a * 10
print(torch.floor(a)) #向上取整
print(torch.ceil(a)) #向下取整
print(torch.round(a)) #四舍五入
print(torch.trunc(a)) #取整数
print(torch.frac(a)) #取小数
print(a % 2) #取余数
4.12 Tensor的比较运算、排序
"""比较"""
a = torch.rand(2, 3)
b = torch.rand(2, 3)
print(torch.eq(a, b)) 
print(torch.equal(a, b)) #比较shape与元素是否都相同
print(torch.gt(a, b))
print(torch.ge(a, b))
print(torch.le(a, b))
print(torch.lt(a, b))
print(torch.ne(a, b))

"""排序"""
a = torch.rand([[1,2,2,5], [2,4,1,3]])
print(torch.sort(a, dim=0, descending=True))  #对第0维排序,降序
print(torch.topk(a, k=2, dim=1)) #返回指定维度上的前k个最大值及其索引
print(torch.kthvalue(a, k=2, dim=0)) # 返回指定维度上的第K个最小值及其索引

print(torch.isfinite(a)) #判断是否有界
print(torch.isfinite(a/2)) 
print(torch.isinf(a/0)) #判断是否无界
print(torch.isnan(a)) #是否None
4.13 Tensor的三角函数

4.14 Tensor的其他函数

以下公众号发布python编程技术,感兴趣的可点击关注哦!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch提供了丰富的张量算术运算,可以对张量进行各种复杂的运算。你可以使用PyTorch算术函数来执行加法、减法、乘法和除法操作。例如,你可以使用add()函数执行张量的加法运算,subtract()函数执行减法运算,multiply()函数执行乘法运算,divide()函数执行除法运算。 此外,PyTorch还支持复杂数的算术运算,通过安装"pytorch-complex-tensor"库,你可以使用该库中提供的ComplexTensor类来进行复杂数的模拟算术运算,该库支持渐变。你可以使用ComplexTensor类来创建初始张量,并在其中执行复杂的算术运算。 下面是一个使用PyTorch进行张量算术运算的例子: ``` import torch # 创建两个张量 a = torch.tensor([1, 2, 3]) b = torch.tensor([4, 5, 6]) # 执行加法运算 c = torch.add(a, b) # 执行减法运算 d = torch.subtract(a, b) # 执行乘法运算 e = torch.multiply(a, b) # 执行除法运算 f = torch.divide(a, b) # 输出结果 print(c) # tensor([5, 7, 9]) print(d) # tensor([-3, -3, -3]) print(e) # tensor([4, 10, 18]) print(f) # tensor([0.25, 0.4, 0.5]) ``` 通过使用PyTorch的张量算术运算,你可以对张量进行各种复杂的运算,并得到所需的结果。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [[PyTroch系列-7]:PyTorch基础 - 张量的算术运算](https://blog.csdn.net/HiWangWenBing/article/details/119428023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pytorch-complex-tensor:Pytorch的非官方复张量和标量支持](https://download.csdn.net/download/weixin_42128537/18698908)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值