Предполагая, что ваш 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]])
После серии комментариев я уже понял вашу проблему иВот способ решить эту проблему:
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 (т.е. скаляров), нам нужно извлечь из них элементы.Для этого мы можем использовать функцию lambda
вместе с map
, задачей которой является применение лямбда-функции к итерируемому (здесь: data_item.values()
) и предоставление нам элементов.Они могут быть переданы в torch.tensor
, чтобы получить желаемый 1D тензор.
# 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]])