web-dev-qa-db-ja.com

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():
    ????

ありがとう!

19
user200340

幸いなことに、あなたが尋ねている正確なケースは、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() opは、 NumPyの高度なインデックス付け よりも強力ではありません。0次元のテンソルのスライス全体の抽出のみをサポートします。より一般的なインデックス作成のサポートが要求されており、 このGitHubの問題 で追跡されています。

29
mrry