繁体   English   中英

如何将列表中的列表转换为火炬张量?

[英]How to convert a list in list to torch tensor?

我想将列表列表转换为 torch.LongTensor。

序列列表中的元素表示嵌入索引,每个列表的大小不同。

例如,

tmp = [[7, 1], [8, 4, 0], [9]]
tmp = torch.LongTensor(tmp)

这个 occrus TypeError: not a sequence

如何将列表中不同大小的列表转换为火炬张量?

您正在寻找嵌套张量(请参阅文档)。

import torch

tmp = [[7, 1], [8, 4, 0], [9]]

tmp = list(map(torch.as_tensor, tmp))
tmp = tmp = torch.nested.as_nested_tensor(tmp, dtype=torch.long)

tmp
>>> nested_tensor([
  tensor([7, 1]),
  tensor([8, 4, 0]),
  tensor([9])
])

或者,您也可以将张量填充到相同的长度:

tmp = torch.nested.to_padded_tensor(tmp, 0).long()
tmp
>>> tensor([
  [7, 1, 0],
  [8, 4, 0],
  [9, 0, 0]
])

欢迎来到 StackOverflow

这将解决您的问题:

tmp = torch.LongTensor(list(map(lambda x: x + [0] * (max(map(len, tmp)) - len(x)), tmp)))

解释:

# 1
map(lambda x: x + [0] * (max(map(len, tmp)) - len(x)), tmp)
  # -> [[7, 1, 0], [8, 4, 0], [9, 0, 0]]

# 2
torch.LongTensor([[7, 1, 0], [8, 4, 0], [9, 0, 0]])
  # -> tensor([[7, 1, 0],
  #            [8, 4, 0],
  #            [9, 0, 0]])
import torch
import itertools

tmp = [[7, 1], [8, 4, 0], [9]]
tmp = torch.LongTensor(list(itertools.chain(*tmp)))

如果您不需要保持形状,这可能会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM