Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过保持张量的特定索引元素来降低张量的维数?_Python_Tensorflow_Tensorflow2.0_Tensor - Fatal编程技术网

Python 如何通过保持张量的特定索引元素来降低张量的维数?

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索引张量来减少维度,或者保留索引值而不是该维度的最大值

维度的缩减类似于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.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]
张量