作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119456242
目录
第1章 Tensor运算概述
1.1 概述
1.3 “in place“运算
1.4 Tensor的广播机制: 不同维度的tensor实例运算
1.5 环境准备
1.6 比较运算概述
第2章 常规值的比较示例
2.1 equal:比较两个tensor是否完全相同
2.2 eq:比较两个tensor的每个元素是否相等关系
2.3 gt:比较两个tensor的每个元素是否为大于关系
第3章 非常规值(isxxx)的比较示例
3.1 isfinite:是否为有界限的数值
3.2 isinf:是否为无界限的数值或无穷值,如1/0就是无限值
3.3 isnan:检测张量元素是否为NAN(空数据)
PyTorch提供了大量的张量运算,基本上可以对标Numpy多维数组的运算,以支持对张量的各种复杂的运算。
这些操作运算中大多是对数组中每个元素执行相同的函数运算,并获得每个元素函数运算的结果序列,这些序列生成一个新的同维度的数组。
https://www.runoob.com/numpy/numpy-linear-algebra.html
1.2 运算分类
(1)算术运算:加、减、系数乘、系数除
(2)函数运算:sin,cos
(3)取整运算:上取整、下取整
(4)统计运算:最大值、最小值、均值
(5)比较运算:大于,等于,小于
(6)线性代数运算:矩阵、点乘、叉乘
“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())
(1)概述
(2)与常规值的比较
备注:
关键词说明:
(3)与非常规值的比较
备注:
isfinite:是否为有界限的数值,
isinf:是否为无界限的数值或无穷值
isnan:检测张量元素是否为nan(空数据),返回true or flase;
isnormal:检测张量元素是否为有效数据。
常规值的比较,不同运算符的比较方法比较类似,这里选出几个进行示意。
# 比较两个tensor是否完全相同
a = torch.Tensor([[1,2,3],[4,5,6]])
print ("原数据a:")
print (a)
b = torch.Tensor([[1,2,3],[4,5,6]])
print ("原数据b:")
print (a)
c = torch.Tensor([[0,2,3],[0,5,6]])
print ("原数据c:")
print (a)
print ('\n')
print ("a与b比较:")
print(torch.equal(a,b))
print ("a与c比较:")
print(torch.equal(a,c))
输出:
原数据a:
tensor([[1., 2., 3.],
[4., 5., 6.]])
原数据b:
tensor([[1., 2., 3.],
[4., 5., 6.]])
原数据c:
tensor([[1., 2., 3.],
[4., 5., 6.]])
# 比较两个tensro之间的每个元素
a = torch.Tensor([[1,2,3],[4,5,6]])
print ("原数据a:")
print (a)
b = torch.Tensor([[1,2,3],[4,5,6]])
print ("原数据b:")
print (a)
c = torch.Tensor([[0,2,3],[0,5,6]])
print ("原数据c:")
print (a)
print ('\n')
print ("a与b比较:")
print(torch.eq(a,b))
print ("a与c比较:")
print(torch.eq(a,c))
输出:
原数据a:
tensor([[1., 2., 3.],
[4., 5., 6.]])
原数据b:
tensor([[1., 2., 3.],
[4., 5., 6.]])
原数据c:
tensor([[1., 2., 3.],
[4., 5., 6.]])
a与b比较:
tensor([[True, True, True],
[True, True, True]])
a与c比较:
tensor([[False, True, True],
[False, True, True]])
# 比较两个tensro之间的每个元素
a = torch.Tensor([[1,2,3],[4,5,6]])
print ("原数据a:")
print (a)
b = torch.Tensor([[1,2,3],[4,5,6]])
print ("原数据b:")
print (a)
c = torch.Tensor([[0,2,3],[0,5,6]])
print ("原数据c:")
print (a)
print ('\n')
print ("a与b比较:")
print(torch.gt(a,b))
print ("a与c比较:")
print(torch.gt(a,c))
输出:
原数据a:
tensor([[1., 2., 3.],
[4., 5., 6.]])
原数据b:
tensor([[1., 2., 3.],
[4., 5., 6.]])
原数据c:
tensor([[1., 2., 3.],
[4., 5., 6.]])
a与b比较:
tensor([[False, False, False],
[False, False, False]])
a与c比较:
tensor([[ True, False, False],
[ True, False, False]])
# 比较tensor的每个元素是否为无穷数据
a = torch.Tensor([0,1,2,3,4,5,6,7,8,9])
print ("原数据a:")
print (a)
print ("原数据b:")
b = a/0
print(b)
print ("原数据b:")
c = -a/0
print(c)
print("比较结果")
print(torch.isfinite(a))
print(torch.isfinite(b))
print(torch.isfinite(b))
输出:
原数据a:
tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
原数据b:
tensor([nan, inf, inf, inf, inf, inf, inf, inf, inf, inf])
原数据b:
tensor([nan, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf])
是否是有限数据
tensor([True, True, True, True, True, True, True, True, True, True])
tensor([False, False, False, False, False, False, False, False, False, False])
tensor([False, False, False, False, False, False, False, False, False, False])
备注:
# 比较tensor的每个元素是否为有限数据
a = torch.Tensor([0,1,2,3,4,5,6,7,8,9])
print ("原数据a:")
print (a)
print ("原数据b:")
b = a/0
print(b)
print ("原数据b:")
c = -a/0
print(c)
print("比较结果")
print(torch.isinf(a))
print(torch.isinf(b))
print(torch.isinf(b))
输出:
原数据a:
tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
原数据b:
tensor([nan, inf, inf, inf, inf, inf, inf, inf, inf, inf])
原数据b:
tensor([nan, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf])
是否是有限数据
tensor([False, False, False, False, False, False, False, False, False, False])
tensor([False, True, True, True, True, True, True, True, True, True])
tensor([False, True, True, True, True, True, True, True, True, True])
备注:
# 比较tensor的每个元素是否为NAN
a = torch.Tensor([0,1,2,3,4,5,6,7,8,9])
print ("原数据a:")
print (a)
print ("原数据b:")
b = a/0
print(b)
print ("原数据b:")
c = -a/0
print(c)
print("比较结果")
print(torch.isnan(a))
print(torch.isnan(b))
print(torch.isnan(b))
输出 :
原数据a:
tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
原数据b:
tensor([nan, inf, inf, inf, inf, inf, inf, inf, inf, inf])
原数据b:
tensor([nan, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf])
比较结果
tensor([False, False, False, False, False, False, False, False, False, False])
tensor([ True, False, False, False, False, False, False, False, False, False])
tensor([ True, False, False, False, False, False, False, False, False, False])
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119456242