2017-11-30 25 views
1

のクロスインデックススライスIは、以下の形の2つのテンソルた:Tensorflow:テンソル

tensor1 => shape(10, 99, 106) 
tensor2 => shape(10, 99) 

tensor2私はtensor1の最後の次元をスライスしtensor3を取得するために使用する0 - 105の範囲の値を含んでい

tensor4 = tf.gather(tensor1, tensor2) 
# this causes tensor4 to be of shape (10, 99, 99, 106) 
:形状

tensor3 => shape(10, 99, 99) 

の私が使って試してみましたまた

、私はこのためにnumpyののcross_indexingに似ている何かを探しています何

tensor4 = tf.gather_nd(tensor1, tensor2) 
# gives the error: last dimension of tensor2 (which is 99) must be 
# less than the rank of the tensor1 (which is 3). 

を使用。

+0

'tensor3'の形はどうですか?単純に(10,99)ではいけませんか? – Sunreef

+0

はい。 'tensor2'の99次元ベクトルを使って' tensor1'の3次元( '106')から' 99'値のみを選択したいと思います。 –

答えて

1

あなたはtf.map_fn使用することができます。

tensor3 = tf.map_fn(lambda u: tf.gather(u[0],u[1],axis=1),[tensor1,tensor2],dtype=tensor1.dtype) 

あなたはtensor1tensor2の最初の次元上で実行されるループとして、このラインと考えることができ、そして彼らの最初のディメンションの各インデックスiのためにそれは上tf.gatherを適用tensor1[i,:,:]およびtensor2[i,:]

+0

ありがとうございます。これは動作します!私はまだmap_fnがそれをやっている方法を理解する必要があります。乾杯! –

関連する問題