【问题标题】:How to extract tensors to numpy arrays or lists from a larger pytorch tensor如何从较大的 pytorch 张量中提取张量到 numpy 数组或列表
【发布时间】:2021-08-15 02:25:43
【问题描述】:

我有一个pytorch张量列表,如下所示:

data = [[tensor([0, 0, 0]), tensor([1, 2, 3])],
        [tensor([0, 0, 0]), tensor([4, 5, 6])]]

现在这只是一个示例数据,实际数据很大但结构相似。

问题:我想将 tensor([1, 2, 3])tensor([4, 5, 6]) 即索引 1 张量从 data 提取到 numpy 数组或扁平形式的列表。

预期输出:

out = array([1, 2, 3, 4, 5, 6])

out = [1, 2, 3, 4, 5, 6]

我尝试了几种方法,其中一种包括map 函数,例如:

map(lambda x: x[1].numpy(), data)

这给出了:

[array([1, 2, 3]),
 array([4, 5, 6])]

而且我无法使用我正在使用的任何其他方法获得所需的结果。任何帮助将不胜感激。

提前致谢:)

【问题讨论】:

  • 它们的尺寸都一样吗?如果是,那会简单得多
  • 是的,我要提取的索引 1 处的张量大小都相同

标签: python list pytorch tensor


【解决方案1】:

好的,你可以这样做。

out = np.concatenate(list(map(lambda x: x[1].numpy(), data)))

【讨论】:

  • 这一行给出了 TypeError,但是在 map 前面添加列表给出了预期的结果。我想不出只是连接数组。感谢您为我指明正确的方向。不过,您可能想更新答案:)
【解决方案2】:

您可以将张量的嵌套列表转换为具有嵌套堆栈的张量/numpy 数组:

data = np.stack([np.stack([d for d in d_]) for d_ in data])

然后您可以轻松地对其进行索引,并连接输出:

>>> np.concatenate(data[:,1])
array([[1, 2, 3],
       [4, 5, 6]])

【讨论】:

    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2020-08-05
    • 2021-02-22
    • 2021-05-14
    • 2019-06-13
    • 1970-01-01
    相关资源
    最近更新 更多