【问题标题】:Indexing a multi-dimensional tensor using only one dimension仅使用一维索引多维张量
【发布时间】:2021-11-25 02:01:19
【问题描述】:

我有一个 PyTorch 张量 b,其形状为:torch.Size([10, 10, 51])。我想使用 numpy 数组在维度 d=1(中间一个)的 10 个可能元素之间选择一个元素:a = np.array([0,1,2,3,4,5,6,7,8,9])。这只是一个随机的例子。

我想做: b[:,a,:] 但这不起作用

【问题讨论】:

  • 所以你期望返回一个形状为(10, 51)的张量?
  • @rkechols 确实
  • 您的问题非常不清楚您期望得到什么。请提供一个b 张量的小例子,以及你期望得到的张量。
  • 没关系,谢谢你的帮助。我发布了答案

标签: python numpy indexing pytorch


【解决方案1】:

您的解决方案很可能是torch.index_select (docs)

不过,您必须先将 a 转换为张量。

a_torch = torch.from_numpy(a)
answer = torch.index_select(b, 1, a_torch)

【讨论】:

  • 谢谢,很有帮助
  • 它没有用。我得到了一个与`b`大小相同的数组
【解决方案2】:

使用a 在第二个轴上索引b 应该这样做:

>>> b = torch.rand(10, 10, 51)
>>> a = np.array([0,1,2,3,4,5,6,7,8,9])

>>> b[:,  a].shape
torch.Size([10, 10, 51])

【讨论】:

  • 我试图从第二个维度中只选择一个元素。在您的结果中,输出仍然具有[10, 10, 51] 的输出形状,而我想要一个诸如[10, 51] @Ivan
  • 我不清楚你想从第一个轴中选择哪个元素,你能举一个小例子来说明想要的结果吗?
  • 我在 PyTorch 论坛上找到了解决方案。我会在帖子中回答。感谢您的帮助
【解决方案3】:

我在 PyTorch 论坛上找到了解决方案: (https://discuss.pytorch.org/t/how-to-select-specific-vector-in-3d-tensor-beautifully/37724)

x = torch.tensor([[[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]],
                  [[11, 12, 13],
                   [14, 15, 16],
                   [17, 18, 19]]])

idx = torch.tensor([1, 2])
x[torch.arange(x.size(0)), idx]

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 2019-02-05
    • 2020-09-26
    • 2017-05-04
    • 2019-09-15
    • 1970-01-01
    • 2018-03-03
    • 2022-06-20
    • 2017-12-20
    相关资源
    最近更新 更多