在tensorflow中找到一个值张量到另一个张量的索引
我有两个向量在tensorflow中找到一个值张量到另一个张量的索引,tensorflow,Tensorflow,我有两个向量 a=[0 0 37 7 8 0 0] b=[0 0 4 37 8] 我想把b的值索引到a中,所以输出如下 c=[0-1 2 4] 如何在Tensorflow ops中执行此操作解决方案: 将tensorflow导入为tf a=tf.常数([0,0,37,7,8,0,0]) b=tf.常数([0,0,4,37,8]) 扩展的_b=b[…,无] 平铺的_a=tf.tile(a[None,…],[tf.shape(b)[0],1]) mult=tf.cast(tf.equal(扩展的,平
a=[0 0 37 7 8 0 0]
b=[0 0 4 37 8]
我想把b的值索引到a中,所以输出如下
c=[0-1 2 4]
如何在Tensorflow ops中执行此操作解决方案:
将tensorflow导入为tf
a=tf.常数([0,0,37,7,8,0,0])
b=tf.常数([0,0,4,37,8])
扩展的_b=b[…,无]
平铺的_a=tf.tile(a[None,…],[tf.shape(b)[0],1])
mult=tf.cast(tf.equal(扩展的,平铺的),tf.float32)
sub=tf.cast(tf.math.equal(tf.reduce_sum(mult,-1),0),tf.int64)
res=tf.argmax(多轴,轴=-1)-sub
使用tf.Session()作为sess:
打印(res.eval())35;[0 0-1 2 4]
说明:
a=tf.常数([0,0,37,7,8,0,0])
b=tf.常数([0,0,4,37,8])
扩展的_b=b[…,无]
#扩展b:
# [[ 0]
# [ 0]
# [ 4]
# [37]
# [ 8]]
平铺的_a=tf.tile(a[None,…],[tf.shape(b)[0],1])
#瓦片
# [[ 0 0 37 7 8 0 0]
# [ 0 0 37 7 8 0 0]
# [ 0 0 37 7 8 0 0]
# [ 0 0 37 7 8 0 0]
# [ 0 0 37 7 8 0 0]]
#现在扩展的_b和平铺的_a可以广播,因此我们可以进行比较
#b的每个元素与a中的所有元素并行
mult=tf.cast(tf.equal(扩展的,平铺的),tf.float32)
#骡子
# [[1. 1. 0. 0. 0. 1. 1.]
# [1. 1. 0. 0. 0. 1. 1.]
# [0. 0. 0. 0. 0. 0. 0.]
# [0. 0. 1. 0. 0. 0. 0.]
# [0. 0. 0. 0. 1. 0. 0.]]
#从mult开始,我们需要从轴-1开始的第一个索引,即!=0(使用argmax)
#sub显示哪些行全部为零(a中没有b元素)
#对于这样的行,我们将值设为1
sub=tf.cast(tf.math.equal(tf.reduce_sum(mult,-1),0),tf.int64)
#潜艇
# [0 0 1 0 0]
#结果
res=tf.argmax(多轴,轴=-1)-sub