TensorFlow系列之十:张量元素的比较与运算基础

第1章 Tensor运算概述

1.1 概述

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

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

https://tensorflow.google.cn/api_docs/python/tf

[TensorFlow系列-10]:TensorFlow基础 - 张量元素的比较运算_张量


1.2 运算分类

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

2)函数运算:sin,cos

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

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

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

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


1.3  “in place“运算 : 不支持

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



1.5 环境准备

登录后复制

#环境准备
import numpy as np
import tensorflow as tf
print("hello world")
print("tensorflow version:", tf.__version__)



1.6 比较运算概述

1)概述

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



2)与常规值的比较

[TensorFlow系列-10]:TensorFlow基础 - 张量元素的比较运算_张量_02

备注:

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



3)与非常规值的比较

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

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

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

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

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

is_normal:检测张量元素是否为有效数据。Tensorflow不支持

第2章 常规值的比较示例

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

2.1 比较两个tensor是否完全相同:不支持

2.2 比较两个tensor的每个元素是否相等关系:tf.math.equal(x,y)

登录后复制

# 代码示例

# 比较两个tensro之间的每个元素
a = tf.constant([[1,2,3],[4,5,6]])  
print ("原数据a:")
print (a)


b = tf.constant([[1,2,3],[4,5,6]])  
print ("原数据b:")
print (a)


c = tf.constant([[0,2,3],[0,5,6]])  
print ("原数据c:")
print (a)

print ("\n比较a与b:")
print(tf.equal(a,b))    
print(tf.math.equal(a,b))    

print ("\n比较a与c:")
print(tf.equal(a,c))
print(tf.math.equal(a,c))   



登录后复制
输出:

原数据a:
tf.Tensor(
[[1 2 3]
 [4 5 6]], shape=(2, 3), dtype=int32)
原数据b:
tf.Tensor(
[[1 2 3]
 [4 5 6]], shape=(2, 3), dtype=int32)
原数据c:
tf.Tensor(
[[1 2 3]
 [4 5 6]], shape=(2, 3), dtype=int32)

比较a与b:
tf.Tensor(
[[ True  True  True]
 [ True  True  True]], shape=(2, 3), dtype=bool)
tf.Tensor(
[[ True  True  True]
 [ True  True  True]], shape=(2, 3), dtype=bool)

比较a与c:
tf.Tensor(
[[False  True  True]
 [False  True  True]], shape=(2, 3), dtype=bool)
tf.Tensor(
[[False  True  True]
 [False  True  True]], shape=(2, 3), dtype=bool)
 


2.3 比较两个tensor的每个元素是否为大小关系:tf.math.greater(x,y)

登录后复制

#代码示例:

# 比较两个tensor之间的每个元素
a = tf.constant([[1,2,3],[4,5,6]])  
print ("原数据a:")
print (a)


b = tf.constant([[1,2,3],[4,5,6]])  
print ("原数据b:")
print (a)


c = tf.constant([[0,2,3],[0,5,6]])  
print ("原数据c:")
print (a)

print ("\n比较a与b:")
print(tf.greater(a,b))
print(tf.math.greater(a,b))

print ("\na比较与c:")
print(tf.greater(a,c))
print(tf.math.greater(a,c))



登录后复制
输出:

原数据a:
tf.Tensor(
[[1 2 3]
 [4 5 6]], shape=(2, 3), dtype=int32)
原数据b:
tf.Tensor(
[[1 2 3]
 [4 5 6]], shape=(2, 3), dtype=int32)
原数据c:
tf.Tensor(
[[1 2 3]
 [4 5 6]], shape=(2, 3), dtype=int32)

比较a与b:
tf.Tensor(
[[False False False]
 [False False False]], shape=(2, 3), dtype=bool)
tf.Tensor(
[[False False False]
 [False False False]], shape=(2, 3), dtype=bool)

a比较与c:
tf.Tensor(
[[ True False False]
 [ True False False]], shape=(2, 3), dtype=bool)
tf.Tensor(
[[ True False False]
 [ True False False]], shape=(2, 3), dtype=bool)
 

2.4 比较两个tensor的每个元素是否为大小关系:tf.math.greater_equal(x,y)

方法同上。

2.5 比较两个tensor的每个元素是否为大小关系:tf.math.less(x,y)

方法同上。

2.6 比较两个tensor的每个元素是否为大小关系:tf.math.less_equal(x,y)

方法同上。

2.7 比较两个tensor的每个元素是否为大小关系:tf.math.not_equal(x,y)

方法同上。

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

3.1 是否为有界限的数值: tf.math.is_finite(x)

登录后复制

#代码示例

# 比较tensor的每个元素是否为无穷数据
a = tf.constant([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(tf.math.is_finite(a))
print(tf.math.is_finite(b))
print(tf.math.is_finite(c))



登录后复制
输出:

原数据a:
tf.Tensor([0. 1. 2. 3. 4. 5. 6. 7. 8. 9.], shape=(10,), dtype=float32)
原数据b:
tf.Tensor([nan inf inf inf inf inf inf inf inf inf], shape=(10,), dtype=float32)
原数据b:
tf.Tensor([ nan -inf -inf -inf -inf -inf -inf -inf -inf -inf], shape=(10,), dtype=float32)

比较结果
tf.Tensor([ True  True  True  True  True  True  True  True  True  True], shape=(10,), dtype=bool)
tf.Tensor([False False False False False False False False False False], shape=(10,), dtype=bool)
tf.Tensor([False False False False False False False False False False], shape=(10,), dtype=bool)

备注:

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

3.2 是否为无界限的数值或无穷值:tf.math.is_inf(x)

登录后复制

# 代码示例

# 比较tensor的每个元素是否为有限数据
a = tf.constant([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])  
print ("原数据a:")
print (a)

print ("原数据b:")
b = a/0
print(b)

print ("原数据c:")
c = -a/0
print(c)

print("\n比较结果")
print(tf.math.is_inf(a))
print(tf.math.is_inf(b))
print(tf.math.is_inf(c))

输出:

登录后复制

输出:

原数据a:
tf.Tensor([0. 1. 2. 3. 4. 5. 6. 7. 8. 9.], shape=(10,), dtype=float32)
原数据b:
tf.Tensor([nan inf inf inf inf inf inf inf inf inf], shape=(10,), dtype=float32)
原数据c:
tf.Tensor([ nan -inf -inf -inf -inf -inf -inf -inf -inf -inf], shape=(10,), dtype=float32)

比较结果
tf.Tensor([False False False False False False False False False False], shape=(10,), dtype=bool)
tf.Tensor([False  True  True  True  True  True  True  True  True  True], shape=(10,), dtype=bool)
tf.Tensor([False  True  True  True  True  True  True  True  True  True], shape=(10,), dtype=bool)

备注:

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

3.3 检测张量元素是否为NAN(空数据):tf.math.is_nas(x)

登录后复制

#代码示例

#  比较tensor的每个元素是否为NAN
a = tf.constant([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("\n比较结果")
print(tf.math.is_nan(a))
print(tf.math.is_nan(b))
print(tf.math.is_nan(c))

登录后复制

输出:

原数据a:
tf.Tensor([0. 1. 2. 3. 4. 5. 6. 7. 8. 9.], shape=(10,), dtype=float32)
原数据b:
tf.Tensor([nan inf inf inf inf inf inf inf inf inf], shape=(10,), dtype=float32)
原数据b:
tf.Tensor([ nan -inf -inf -inf -inf -inf -inf -inf -inf -inf], shape=(10,), dtype=float32)

比较结果
tf.Tensor([False False False False False False False False False False], shape=(10,), dtype=bool)
tf.Tensor([ True False False False False False False False False False], shape=(10,), dtype=bool)
tf.Tensor([ True False False False False False False False False False], shape=(10,), dtype=bool)


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空