2016-03-07 27 views
8

Tôi có một câu hỏi cơ bản về cách lập chỉ mục trong TensorFlow.TensorFlow: sử dụng một tensor để lập chỉ mục một tensor khác

Trong 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] 

tôi có thể nhận

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

Làm thế nào tôi có thể làm điều này trong 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(): 
    ???? 

Cảm ơn!

+0

http://stackoverflow.com/questions/33736795/tensorflow-numpy-like-tensor-indexing?rq=1 không phải là điều bạn đang hỏi? – Alleo

Trả lời

19

May mắn thay, trường hợp chính xác mà bạn đang hỏi về được hỗ trợ trong TensorFlow bởi 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])' 

Các tf.gather() op là ít mạnh mẽ hơn NumPy's advanced indexing: nó chỉ hỗ trợ giải nén lát đầy đủ của một tensor trên khía cạnh của nó 0 . Hỗ trợ lập chỉ mục tổng quát hơn đã được yêu cầu và đang được theo dõi trong this GitHub issue.

+1

Cảm ơn bạn rất nhiều! – user200340

+3

Tensorflow bây giờ có một 'tf.gather_nd()' op mạnh hơn. – fritzo

Các vấn đề liên quan