Python 如何通过保持张量的特定索引元素来降低张量的维数?
维度的缩减类似于reduce_max()所做的,不同之处在于我需要该维度中元素的特定索引,而不是简单地选择最大的索引。例如,我有一个2x3张量a=[[0,1,2],[2,2,0]]。如果我应用tf.argmax(A),我会得到索引张量[1,1,0]。我如何使用这个索引张量[1,1,0]来得到作为tf的张量。reduce_max(A,0)=[2,2,2]Python 如何通过保持张量的特定索引元素来降低张量的维数?,python,tensorflow,tensorflow2.0,tensor,Python,Tensorflow,Tensorflow2.0,Tensor,维度的缩减类似于reduce_max()所做的,不同之处在于我需要该维度中元素的特定索引,而不是简单地选择最大的索引。例如,我有一个2x3张量a=[[0,1,2],[2,2,0]]。如果我应用tf.argmax(A),我会得到索引张量[1,1,0]。我如何使用这个索引张量[1,1,0]来得到作为tf的张量。reduce_max(A,0)=[2,2,2] 我不直接使用tf.reduce\u max的原因是我想使用不同的索引张量而不是argmax索引张量来减少维度,或者保留索引值而不是该维度的最大值
我不直接使用tf.reduce\u max的原因是我想使用不同的索引张量而不是argmax索引张量来减少维度,或者保留索引值而不是该维度的最大值。您可以使用
tf.gather\u nd
函数来实现这一点,但您需要转换[1,1,0]
将张量索引为2D张量
这里我假设索引张量是一个numpy数组(您可以通过调用.numpy()
方法将tensorflow张量转换为numpy数组)
idx = np.array([1, 1, 0])
idx = np.c_[idx[:, np.newaxis], np.arange(len(idx))]
print(idx)
# Output:
# array([[1, 0],
# [1, 1],
# [0, 2]])
这意味着:使用上述tf.gather\n时拾取(row1,col0)、(row1,col1)和(row0,col2)
A = tf.Variable([[0, 1, 2], [2, 2, 0]])
tf.gather_nd(A, idx)
将为您提供预期的[2,2,2]
张量