pytorch 多热向量

问题描述 投票:0回答:1

我想在 PyTorch 中实现一个多热向量。

  1. 创建大小为 len(x) x (multi_hot_num * max_num) 的零张量
  2. 然后,对于 'x' 中的每个元素,用 1 填充张量中从 x[i] * multi_hot_num 到 (x[i]+1) * multi_hot_num 的相应索引范围。

以下代码简洁地演示了所需的行为:

max_num = 4
multi_hot_num = 3
x = torch.tensor([0, 2, 1])

期望输出:

tensor([[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 ,0, 0]])
python pytorch tensor
1个回答
0
投票

我尝试找到一种没有循环的优化方法,但似乎使用循环是唯一的解决方案(据我所知)。

import torch

max_num = 4
multi_hot_num = 3
x = torch.tensor([0, 2, 1])

assert torch.all(x < max_num)

result = torch.zeros(len(x), max_num*multi_hot_num)
for i, (start, end) in enumerate(zip(x*multi_hot_num, (x+1)*multi_hot_num)):
    result[i, start:end] = 1.
    
print(result)

结果:

tensor([[1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0., 1., 1., 1., 0., 0., 0.],
        [0., 0., 0., 1., 1., 1., 0., 0., 0., 0., 0., 0.]])
© www.soinside.com 2019 - 2024. All rights reserved.