作者主页(文火冰糖的硅基工坊):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章 广播机制
PyTorch提供了大量的张量运算,基本上可以对标Numpy多维数组的运算,以支持对张量的各种复杂的运算。
这些操作运算中大多是对数组中每个元素执行相同的函数运算,并获得每个元素函数运算的结果序列,这些序列生成一个新的同维度的数组。
https://pytorch.org/docs/master/torch.html
1.2 运算分类
(1)算术运算:加、减、系数乘、系数除
(2)函数运算:sin,cos
(3)取整运算:上取整、下取整
(4)统计运算:最大值、最小值、均值
(5)线性代数运算
“in place“运算不是某个特定的函数运算,而是每个函数都有自己的“in place“运算的版本。
xxx_():执行完该操作,直接修改tensor自身的值。
基本上,每个函数都有自己的in place版本。
如
torch.cos() =》torch.cos_()
torch.floor() =》torch.floor_()
import numpy as np
import torch
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())
PyTorch算术函数包含简单的加减乘除运算: add(),subtract(),multiply() 和 divide()。
算术运算后得到的结果依然是是相同维度的数组。
#代码实例
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])
#代码实例
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])
#代码实例
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.])
#代码实例
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.])
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.])
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.])
当两个张量的维度不同,对他们进行运算时,需要对维度小的张量进行扩展,扩展成高纬度的张量,这个扩展的过程采用的是广播机制,即对低维度数据进行广播式(拷贝)扩展。
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