用索引切片张量

时间:2016-08-09 12:52:31

标签: tensorflow

我有一个张量tf.shape(X) == [M, N, N]和一组索引tf.shape(IDX) == [N, N]。如何在第一维中使用索引tf.shape(Y) = [N, N]形成张量X,等于IDX的切片?即 所有Y[i, j] = X[IDX[i, j], i, j] i,j = 1..N。 我曾尝试使用tf.gather_nd,但没有结果:(

1 个答案:

答案 0 :(得分:2)

2016年12月12日更新:

从tensorflow版本0.11开始,可以像numpy一样索引到张量。

a = tf.Variable([9,10,11])
b = tf.constant([[1,2,3,4],[5,6,7,8]])
a = b[0,1:]

索引也支持渐变。

你有什么尝试?

似乎我报告了tf.gather_nd的错误。 这是回复

  

最近增加了对gather_nd中支持部分索引(比维度更少的索引)的支持。您使用的是TensorFlow版本,其中每个索引张量必须具有恰好的张量维数。代码应该在HEAD工作。

因此,在版本0.10或更高版本下,gather_nd应该可以像你想要的那样工作。

然而,以下工作

import tensorflow as tf
x = tf.constant([[1,1,1,1],[1,2,3,4]],shape=(2,4))
indices = [[0,0],[0,1]]
y = tf.gather_nd(x,indices)

所以看起来你现在需要完整的索引描述,而不仅仅是切片0.你也可以试试tf.pack。

您还可以在此处跟踪张量流中索引张量的进度: https://github.com/tensorflow/tensorflow/issues/206