在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