#python #matrix #pytorch #tensor #softmax
Вопрос:
Учитывая входные данные, такие как:
tensor([[[1.9392, -1.9266, 0.9664],
[0.0000, -1.9266, 0.9664],
[0.0000, -0.0000, 0.9664]]])
Мой желаемый результат таков:
tensor([[[0.4596, 0.0096, 0.1737],
[0.0000, 0.0096, 0.1737],
[0.0000, -0.0000, 0.1737]]])
Т. е. просто вычисляем функцию над верхними треугольными элементами.
Ответ №1:
Вы можете получить доступ к верхним треугольным элементам с помощью torch.triu_indices
:
t = tensor([[1.9392, -1.9266, 0.9664],
[0.0000, -1.9266, 0.9664],
[0.0000, -0.0000, 0.9664]])
idx = torch.triu_indices(*t.shape)
soft = F.softmax(t[idx[0], idx[1]], dim=0)
Если вы хотите переназначить значения, как в желаемом выводе:
>>> t[idx[0], idx[1]] = soft
>>> t
tensor([[0.4596, 0.0096, 0.1737],
[0.0000, 0.0096, 0.1737],
[0.0000, -0.0000, 0.1737]])
Комментарии:
1. если форма тензора 3D, например, r.shape=torch.tensor([5,3,3]), я думаю, использовать для такого цикла
for i in range(r.shape[0]): sub_r = r[i] other code like you
правильно?