[PyTroch系列-10]:PyTorch基础 - 张量Tensor元素的比较运算

Posted 文火冰糖的硅基工坊

tags:

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

作者主页(文火冰糖的硅基工坊):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(空数据)


第1章 Tensor运算概述

1.1 概述

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

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

https://www.runoob.com/numpy/numpy-linear-algebra.html

 

1.2 运算分类

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

(2)函数运算:sin,cos

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

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

(5)比较运算:大于,等于,小于

(6)线性代数运算:矩阵、点乘、叉乘

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 比较运算概述

(1)概述

  • 张量比较是指张量的每个元素的的比较
  • 比较的对象,可以是两个张量之间的对应元素的比较
  • 比较的对象,可以是一个张量中的所有元素与0、指定元素、无效值NA或无穷值进行比较
  • 比较的结果是只包含true和false的张量。

(2)与常规值的比较

备注:

  • other是比较对象,可以是张量,可以是数字,默认是0
  • 比较的结果是只包含true和false的张量。

关键词说明:

  • ge; greater and equal,  大于等于
  • gt: greater than, 大于
  • le: less and equal,小于等于
  • lt:  less than,小于
  • ne: not equal,不等于
  • equal与上述几个不同,equal是比较两个张量整体是否完全相同,返回一个true或false。

(3)与非常规值的比较

备注:

isfinite:是否为有界限的数值,

isinf:是否为无界限的数值或无穷值

  • 正数/0 =》正无穷,用inf表示
  • 附属/0 =》 负无穷,用-inf表示

isnan:检测张量元素是否为nan(空数据),返回true or flase;

  • 无效数据
  • 非数字数据,
  • 0/0
  • 读取外部数据时,无输入数据

isnormal:检测张量元素是否为有效数据。

第2章 常规值的比较示例

常规值的比较,不同运算符的比较方法比较类似,这里选出几个进行示意。

2.1 equal:比较两个tensor是否完全相同

# 比较两个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.]])

2.2 eq:比较两个tensor的每个元素是否相等关系

# 比较两个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]])

2.3 gt:比较两个tensor的每个元素是否为大于关系

# 比较两个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]])

第3章 非常规值(isxxx)的比较示例

3.1 isfinite:是否为有界限的数值

# 比较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])

备注:

  • 0/0为nan数据
  • inf为正无穷
  • -inf为负无穷
  • nan不是正无穷,也不是负无穷

3.2 isinf:是否为无界限的数值或无穷值,如1/0就是无限值

# 比较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])

备注:

  • nas既不是有限数据,也不是无限数据。

3.3 isnan:检测张量元素是否为NAN(空数据)

#  比较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

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

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

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

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

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

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

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