【发布时间】:2026-02-17 08:55:01
【问题描述】:
很抱歉,问题标题冗长乏味,难以理解。基本上,我想在 tensorflow 中实现一个函数:
例如 对于维度为 [10, 10, 7, 1] 的张量 A 和索引矩阵 B = array([[1,3,5],[2,4,6]])。我想根据B每行的索引提取A中的元素以及axis = 2(遵循Python约定,A有0,1,2,3四个轴)。
所以示例的结果应该是一个维度为 [10, 10, 3, 2] 的张量 C,其中第三个维度是由于根据索引 [1,3,5] 沿轴 = 2 选择 A 中的元素] 或 [2,4,6],并且第四维等于 B 的第一个维度(即此处 B 的行数),因为我们在这里沿该维度进行了两次选择。
在张量流中实现这一点的任何“张量青睐”线索,而不是分两步完成?我没有看到使用 tf.gather_nd() 或 tf.gather() 的方法。任何想法?非常感谢!
另一个例子:
A = [[[1], # A is (3, 5, 1)
[2],
[3],
[4],
[5]]],
[[[10],
[20],
[30],
[40],
[50]]],
[[[100],
[200],
[300],
[400],
[500]]]
B = [[1,4,3], # B is (2,3)
[2,3,5]]
C = [[[1, 2], # C is (3, 3, 2)
[4, 3],
[3, 5]]],
[[[10, 20],
[40, 30],
[30, 50]]],
[[[100, 200],
[400, 300],
[300, 500]]]
【问题讨论】:
-
"根据索引 [1,3,5] 沿轴 = 2..."... 这是什么意思? axis=2 索引的形式应该是(开始、停止、步进),例如A[...,1:4:2,:] 的形状为 (10,10,2,1)。轴 2 上的 [1,3,5] 索引是多少?
-
对不起,我的意思是这句话,例如,考虑 A[0,0],它应该是一个 7×1 矩阵,并通过引用索引 [1,3 ,5],我想提取 A[0,0,1]、A[0,0,3] 和 A[0,0,5]。我不是要使用包含所有奇数的[1,3,5],索引矩阵B也可以像数组([[1,4,5],[2,3,5]])。所以像 (start, stop, step) 这样的东西都行不通。谢谢!
-
这很有帮助。还有一个问题:在您的示例中,
A的第四维度在哪里?是否只是为了“容纳”B的索引?即。如果A的形状为 (10,10,7,5),C的形状是什么? -
嗨,是的,最后一个维度仅用于“容纳”B,因为 B 有两行,就像 A 的两个“查询”一样。如果 A 是 (10,10,7,5) , 那么 A 将首先被重新整形为 (10,10,7,1,5),最终的 C 将是 (10,10,3,2,5)。
标签: python tensorflow tensor