[PyTroch系列-7]:PyTorch基础 - 张量Tensor的算术运算

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PyTroch系列-7]:PyTorch基础 - 张量Tensor的算术运算相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119428023


目录

 第1章 Tensor运算概述

1.1 概述

1.3  “in place“运算 

1.4 Tensor的广播机制: 不同维度的tensor实例运算

1.5 环境准备

1.6 算术运算概述:加、减、系数乘、系数除

第2章 加法运算:add

第3章 减法运算:subtract

第4章 乘法运算:multiply

第5章除法运算:divide

第6章 倒数运算:reciprocal()

第7章 幂运算:power()

第8章 广播机制




 第1章 Tensor运算概述

1.1 概述

PyTorch提供了大量的张量运算,基本上可以对标Numpy多维数组的运算,以支持对张量的各种复杂的运算。

这些操作运算中大多是对数组中每个元素执行相同的函数运算,并获得每个元素函数运算的结果序列,这些序列生成一个新的同维度的数组。

https://pytorch.org/docs/master/torch.html

 1.2 运算分类

(1)算术运算:加、减、系数乘、系数除

(2)函数运算:sin,cos

(3)取整运算:上取整、下取整

(4)统计运算:最大值、最小值、均值

(5)线性代数运算

1.3  “in place“运算 

“in place“运算不是某个特定的函数运算,而是每个函数都有自己的“in place“运算的版本。

xxx_():执行完该操作,直接修改tensor自身的值。

基本上,每个函数都有自己的in place版本。

torch.cos() =》torch.cos_()

torch.floor() =》torch.floor_()

1.4 Tensor的广播机制: 不同维度的tensor实例运算

1.5 环境准备

import numpy as np
import torch
 
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())

1.6 算术运算概述:加、减、系数乘、系数除

PyTorch算术函数包含简单的加减乘除运算add()subtract()multiply() 和 divide()

算术运算后得到的结果依然是是相同维度的数组。

第2章 加法运算:add

#代码实例
a = torch.arange(9)
print ('原数据a:')
print (a)
print ('\\n')

b = torch.arange(9)
print ('原数据b:')
print (b)
print ('\\n')

print ('运算后数据:')
print (a+b)
print (torch.add(a,b))
print (a.add(b))
print ('\\n')

print (a)
print ('\\n')
输出结果为:

原数据a:
tensor([0, 1, 2, 3, 4, 5, 6, 7, 8])


原数据b:
tensor([0, 1, 2, 3, 4, 5, 6, 7, 8])


运算后数据:
tensor([ 0,  2,  4,  6,  8, 10, 12, 14, 16])
tensor([ 0,  2,  4,  6,  8, 10, 12, 14, 16])
tensor([ 0,  2,  4,  6,  8, 10, 12, 14, 16])


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

第3章 减法运算:subtract

#代码实例

a = torch.arange(1,10)
print ('原数据a:')
print (a)
print ('\\n')

b = torch.arange(0,9)
print ('原数据b:')
print (b)
print ('\\n')

print ('运算后数据:')
print (a-b)
print (torch.sub(a,b))
print (a.sub(b))
print ('\\n')

print (a)
print ('\\n')
#输出结果

原数据a:
tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])


原数据b:
tensor([0, 1, 2, 3, 4, 5, 6, 7, 8])


运算后数据:
tensor([1, 1, 1, 1, 1, 1, 1, 1, 1])
tensor([1, 1, 1, 1, 1, 1, 1, 1, 1])
tensor([1, 1, 1, 1, 1, 1, 1, 1, 1])


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

第4章 乘法运算:multiply

#代码实例

a = torch.Tensor([2,4,6,8,10,12])
print ('原数据a:')
print (a)
print ('\\n')

b = torch.Tensor([2,4,6,8,10,12])
print ('原数据b:')
print (b)
print ('\\n')

print ('运算后数据:')
print (a*b)
print (torch.multiply(a,b))
print (a.multiply(b))
print ('\\n')

print (a)
print ('\\n')
#输出结果

原数据a:
tensor([ 2.,  4.,  6.,  8., 10., 12.])


原数据b:
tensor([ 2.,  4.,  6.,  8., 10., 12.])


运算后数据:
tensor([  4.,  16.,  36.,  64., 100., 144.])
tensor([  4.,  16.,  36.,  64., 100., 144.])
tensor([  4.,  16.,  36.,  64., 100., 144.])


tensor([ 2.,  4.,  6.,  8., 10., 12.])

第5章除法运算:divide

#代码实例

a = torch.Tensor([2,4,6,8,10,12])
print ('原数据a:')
print (a)
print ('\\n')

b = torch.Tensor([2,4,6,8,10,12])
print ('原数据b:')
print (b)
print ('\\n')

print ('运算后数据:')
print (a/b)
print (torch.div(a,b))
print (a.div(b))
print ('\\n')

print (a)
print ('\\n')

#输出结果

原数据a:
tensor([ 2.,  4.,  6.,  8., 10., 12.])


原数据b:
tensor([ 2.,  4.,  6.,  8., 10., 12.])


运算后数据:
tensor([1., 1., 1., 1., 1., 1.])
tensor([1., 1., 1., 1., 1., 1.])
tensor([1., 1., 1., 1., 1., 1.])


tensor([ 2.,  4.,  6.,  8., 10., 12.])

第6章 倒数运算:reciprocal()

reciprocal() 函数返回参数逐元素的倒数。如 1/4 倒数为 4/1

#实例

a = torch.Tensor([2,4,5,8,10,20])
print("原数据a")
print(a)

#导数运算
print("运算数据")
print(1/a)
print(torch.reciprocal(a))
print(a.reciprocal())

print("原数据")
print (a)
#输出结果为:

原数据
tensor([ 2.,  4.,  5.,  8., 10., 20.])
倒数数据
tensor([0.5000, 0.2500, 0.2000, 0.1250, 0.1000, 0.0500])
tensor([0.5000, 0.2500, 0.2000, 0.1250, 0.1000, 0.0500])
tensor([0.5000, 0.2500, 0.2000, 0.1250, 0.1000, 0.0500])
原数据
tensor([ 2.,  4.,  5.,  8., 10., 20.])

第7章 幂运算:power()

power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的

#实例

a = torch.Tensor([10,10,10,10,10])
b = torch.Tensor([1,2,3,4,5])
print("原数据a")
print(a)
print("原数据b")
print(b)

#导数运算
print("运算后数据")
#print(a^b)
print(torch.pow(a,b))
print(a.pow(b))

print("原数据a")
print (a)
#输出结果为:

原数据a
tensor([10., 10., 10., 10., 10.])
原数据b
tensor([1., 2., 3., 4., 5.])
运算后数据
tensor([1.0000e+01, 1.0000e+02, 1.0000e+03, 1.0000e+04, 1.0000e+05])
tensor([1.0000e+01, 1.0000e+02, 1.0000e+03, 1.0000e+04, 1.0000e+05])
原数据a
tensor([10., 10., 10., 10., 10.])

第8章 广播机制

当两个张量的维度不同,对他们进行运算时,需要对维度小的张量进行扩展,扩展成高纬度的张量,这个扩展的过程采用的是广播机制,即对低维度数据进行广播式(拷贝)扩展。

a = torch.arange(9).reshape(3,3)
print ('第一个数组:')
print (a)
print ('\\n')

print ('第二个数组:')
b = np.array([10,10,10])  
print (b)
print ('\\n')

print ('两个数组相加:')
print (np.add(a,b))
print ('\\n')
输出结果:

第一个数组:
tensor([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])


第二个数组:
[10 10 10]


两个数组相加:
tensor([[10, 11, 12],
        [13, 14, 15],
        [16, 17, 18]])

作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119428023

以上是关于[PyTroch系列-7]:PyTorch基础 - 张量Tensor的算术运算的主要内容,如果未能解决你的问题,请参考以下文章

[PyTroch系列-13]:PyTorch基础 - 张量的操作 - 筛选过滤

[PyTroch系列-5]:PyTorch基础 - 稀疏矩阵与其创建方法

[PyTroch系列-11]:PyTorch基础 - 张量Tensor元素的排序

[PyTroch系列-17]:PyTorch基础 - 张量的索引与切片

[PyTroch系列-4]:PyTorch基础 - 张量(Tensor)的创建方法

[PyTroch系列-15]:PyTorch基础 - 张量的操作 - 拆分与分割