Python 我如何断言张量是一个由0到N`True`s,然后是0到N`False`s组成的序列?
如何断言张量如下所示(例如): 但拒绝这样的输入:Python 我如何断言张量是一个由0到N`True`s,然后是0到N`False`s组成的序列?,python,tensorflow,tensorflow2.x,Python,Tensorflow,Tensorflow2.x,如何断言张量如下所示(例如): 但拒绝这样的输入: [ True, False, True, False, False, True, False ] [ False, False, False, False, True ] 或者更一般地说:我想测试一个张量是否只由0到N个真值,然后是0到N个假值组成的序列。如何使用Tensorflow 2实现这一点?这是实现这一点的一种方法: 将tensorflow导入为tf def有效(a): #假设a是一维布尔数组 a=tf。将_转换为_张量(a) #转换
[ True, False, True, False, False, True, False ]
[ False, False, False, False, True ]
或者更一般地说:我想测试一个张量是否只由0到N个真值,然后是0到N个假值组成的序列。如何使用Tensorflow 2实现这一点?这是实现这一点的一种方法:
将tensorflow导入为tf
def有效(a):
#假设a是一维布尔数组
a=tf。将_转换为_张量(a)
#转换为整数
a_int=tf.dtypes.cast(a,tf.int32)
#以两两差异为例
diff=a_int[1:]-a_int[:-1]
#检查所有差异是否为零或负(无从False到True的转换)
返回tf.reduce_all(diff另一种方法,研究元素的指数:
import tensorflow as tf
def is_valid(t):
where_false = tf.where(~t)
return len(where_false) == 0 or all( idx_true < min(where_false) for idx_true in tf.where(t))
assert is_valid(tf.constant([ True, True ]))
assert is_valid(tf.constant([ True, True, True, False, False, False, False ]))
assert is_valid(tf.constant([ True, True, True, False, False ]))
assert is_valid(tf.constant([ True, False, False, False, False ]))
assert is_valid(tf.constant([ False, False ]))
assert not is_valid(tf.constant([ True, False, True, False, False, True, False ]))
assert not is_valid(tf.constant([ False, False, False, False, True ]))
将tensorflow导入为tf
def有效(t):
where_false=tf.where(~t)
返回len(其中_false)==0或全部(对于tf中的idx_true,idx_true
其思想是,所有的真值都应该出现在第一个假值之前,如果有的话
import tensorflow as tf
def is_valid(t):
where_false = tf.where(~t)
return len(where_false) == 0 or all( idx_true < min(where_false) for idx_true in tf.where(t))
assert is_valid(tf.constant([ True, True ]))
assert is_valid(tf.constant([ True, True, True, False, False, False, False ]))
assert is_valid(tf.constant([ True, True, True, False, False ]))
assert is_valid(tf.constant([ True, False, False, False, False ]))
assert is_valid(tf.constant([ False, False ]))
assert not is_valid(tf.constant([ True, False, True, False, False, True, False ]))
assert not is_valid(tf.constant([ False, False, False, False, True ]))