2016-03-07 4 views
8

У меня есть основной вопрос о том, как сделать индексацию в TensorFlow.TensorFlow: используя тензор для индексации другого тензора

В NumPy:

x = np.asarray([1,2,3,3,2,5,6,7,1,3]) 
e = np.asarray([0,1,0,1,1,1,0,1]) 
#numpy 
print x * e[x] 

я могу получить

[1 0 3 3 0 5 0 7 1 3] 

Как я могу это сделать в TensorFlow?

x = np.asarray([1,2,3,3,2,5,6,7,1,3]) 
e = np.asarray([0,1,0,1,1,1,0,1]) 
x_t = tf.constant(x) 
e_t = tf.constant(e) 
with tf.Session(): 
    ???? 

Спасибо!

+0

http://stackoverflow.com/questions/33736795/tensorflow-numpy-like-tensor-indexing?rq=1 это не то, о чем вы просите? – Alleo

ответ

19

К счастью, точный случай, вы спрашиваете о поддерживается в TensorFlow по tf.gather():

result = x_t * tf.gather(e_t, x_t) 

with tf.Session() as sess: 
    print sess.run(result) # ==> 'array([1, 0, 3, 3, 0, 5, 0, 7, 1, 3])' 

tf.gather() оп является менее мощным, чем NumPy's advanced indexing: он поддерживает только извлечение полных ломтиков тензора на его 0-й размерности , Была запрошена поддержка более общей индексации и отслеживается в this GitHub issue.

+1

Большое спасибо! – user200340

+3

Tensorflow теперь имеет более мощный 'tf.gather_nd()' op. – fritzo

Смежные вопросы