#python #pytorch
#python #pytorch
Вопрос:
Как мне преобразовать тензор PyTorch для просмотра, такого как ((value0, row0, column0), (value1, row0, column1)...)
? Например, если у меня есть тензор
a = torch.tensor([[5, 7],
[9, 11]])
Функция должна возвращать:
((5, 0, 0), (7, 0, 1), (9, 1, 0), (11, 1, 1))
. Кроме того, я хочу, чтобы эта функция применялась для констант, 1D, 3D, 4D и т. Д. тензоров, например, Для 3D я хочу, чтобы он выводил (value0, dim1, dim2, dim3).
Я пытался использовать циклы for, но не понял, как их использовать для этой задачи: я могу создать функцию только для постоянного числа измерений, например, только для 2D.
Ответ №1:
добро пожаловать в StackOverflow! Если предполагается, что ваш тензор содержит только ненулевые значения, то, я думаю, самый простой способ — использовать to_sparse
:
a = torch.tensor([[5, 7], [9, 11]])
def coords(t):
sp_t = t.to_sparse()
idx = sp_t.indices().T
vals = sp_t.values()
return torch.cat([vals.view(-1,1), idx],1)
coords(a)
>>> tensor([[ 5, 0, 0],
[ 7, 0, 1],
[ 9, 1, 0],
[11, 1, 1]])
Если это невозможно предположить, пожалуйста, скажите мне, обходной путь с repeat
и repeat_interleave
должен быть возможен