假设您的 data 是一个字典:
In [59]: dct = {0: np.array([5]), 1: np.array([0]), 2: np.array([4]),
3: np.array([1]), 4: np.array([9]), 5: np.array([2]),
6: np.array([1]), 7: np.array([3])}
您可以使用 numpy.concatenate() 包裹在 torch.tensor() 中来获取张量:
In [63]: torch.tensor(np.concatenate(list(dct.values())))
Out[63]: tensor([5, 0, 4, 1, 9, 2, 1, 3])
此外,如果您希望键和值都堆叠在单个 2D 张量中,请使用 torch.cat()
# tensor with just keys
In [86]: tk = torch.tensor(list(dct.keys()))
In [87]: tk
Out[87]: tensor([0, 1, 2, 3, 4, 5, 6, 7])
# tensor with just values
In [88]: tv = torch.tensor(np.concatenate(list(dct.values())))
In [89]: tv
Out[89]: tensor([5, 0, 4, 1, 9, 2, 1, 3])
# horizontally stack them into a single 2D tensor
In [85]: torch.cat((tk[:, None], tv[:, None]), dim=1)
Out[85]:
tensor([[0, 5],
[1, 0],
[2, 4],
[3, 1],
[4, 9],
[5, 2],
[6, 1],
[7, 3]])
经过一系列的cmets,我现在明白了你的问题,这里是解决它的方法:
In [48]: data_item = {0: np.array(5), 1: np.array(0), 2: np.array(4),
3: np.array(1), 4: np.array(9), 5: np.array(2),
6: np.array(1), 7: np.array(3)}
# convert keys to an 1D tensor
In [53]: tk = torch.tensor(list(data_item.keys()))
In [54]: tk
Out[54]: tensor([0, 1, 2, 3, 4, 5, 6, 7])
由于您将值作为 0D 数组(即标量),我们需要从中提取元素。为此,我们可以在 map 旁边使用 lambda 函数,它的工作是将 lambda 函数应用于可迭代对象(这里:data_item.values())并给我们元素。这些可以传递给torch.tensor 以获得所需的一维张量。
# convert values to an 1D tensor
In [57]: tv = torch.tensor(list(map(lambda a: a.item(), data_item.values())))
In [58]: tv
Out[58]: tensor([5, 0, 4, 1, 9, 2, 1, 3])
# horizontally stack them into a single 2D tensor, if needed
In [85]: torch.cat((tk[:, None], tv[:, None]), dim=1)
Out[85]:
tensor([[0, 5],
[1, 0],
[2, 4],
[3, 1],
[4, 9],
[5, 2],
[6, 1],
[7, 3]])