Python 访问张量中单个元素的更好方法

Python 访问张量中单个元素的更好方法,python,python-3.x,tensorflow,Python,Python 3.x,Tensorflow,我试图访问张量a的元素,索引在张量b中定义 我希望输出是 out = [1 6 7 4] 我所尝试的: out=[] for i in range(a.shape[1]): out.append(a[b[i],i]) out=tf.stack(out) #[1 6 7 4] 这是给正确的输出,但我正在寻找一个更好的和紧凑的方式来做到这一点 此外,当a的形状类似于2时,我的逻辑也不起作用,因为我无法使用rangea.shape[1]进行迭代,如果答案也包括这种情况,这将对我有所帮助

我试图访问张量a的元素,索引在张量b中定义

我希望输出是

out = [1 6 7 4]
我所尝试的:

out=[]
for i in range(a.shape[1]):
    out.append(a[b[i],i])

out=tf.stack(out) #[1 6 7 4]
这是给正确的输出,但我正在寻找一个更好的和紧凑的方式来做到这一点

此外,当a的形状类似于2时,我的逻辑也不起作用,因为我无法使用rangea.shape[1]进行迭代,如果答案也包括这种情况,这将对我有所帮助

谢谢

您可以使用tf.one\u hot和tf.boolean\u mask

out=[]
for i in range(a.shape[1]):
    out.append(a[b[i],i])

out=tf.stack(out) #[1 6 7 4]
import tensorflow as tf
import numpy as np

a_tf = tf.placeholder(shape=(2,None),dtype=tf.int32)
b_tf = tf.placeholder(shape=(None,),dtype=tf.int32)

index = tf.one_hot(b_tf,a_tf.shape[0])
out = tf.boolean_mask(tf.transpose(a_tf),index)

a=np.array([[1,2,3,4],[5,6,7,8]])
b=np.array([0,1,1,0])
with tf.Session() as sess:
    print(sess.run(out,feed_dict={a_tf:a,b_tf:b}))

# print
[1 6 7 4]