创建具有所需值的火炬张量

Create a torch tensor with desired values

我想创建一个大小为 100 且值为 10 和 100 的火炬张量。 例如:下面给出了一个值在 5 到 6 之间的张量。

torch.randint(5,7,(100,))

tensor([6, 6, 6, 5, 5, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 5, 6, 5, 5, 6, 5, 5, 5, 5,
        6, 5, 5, 5, 5, 5, 6, 6, 6, 5, 6, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 6, 5,
        5, 6, 5, 6, 5, 6, 5, 6, 6, 6, 6, 5, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 5, 6,
        5, 5, 5, 5, 6, 6, 5, 6, 6, 6, 5, 5, 6, 6, 5, 6, 6, 6, 5, 5, 5, 5, 5, 6,
        6, 6, 5, 6])

而不是这个,我想要一个值为 10 和 100 的张量,我不想要整数 10 和 100 之间的值。张量应该只包含 10 和 100。我该怎么做?

提前致谢。

如果您从 {0, 1} 采样,那么从 [0, 1][10, 100] 的简单映射就足够了

此处 x -> (b-a)x + a = (100-10)x + 10 = 90x + 10 将起作用:

>>> rand = torch.randint(0, 2, (100,))
tensor([0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0,
        0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
        0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1,
        0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1,
        1, 1, 0, 0])

>>> 90*rand+10
tensor([ 10,  10, 100, 100, 100, 100,  10, 100, 100, 100, 100,  10,  10, 100,
        100,  10, 100, 100,  10, 100, 100, 100,  10,  10,  10,  10,  10, 100,
         10,  10, 100,  10, 100, 100,  10,  10, 100,  10,  10,  10,  10,  10,
        100,  10,  10, 100,  10,  10,  10, 100, 100, 100, 100,  10, 100, 100,
         10,  10, 100,  10, 100,  10, 100,  10, 100, 100,  10,  10,  10,  10,
        100, 100,  10,  10, 100, 100,  10,  10,  10, 100,  10,  10, 100,  10,
        100, 100,  10,  10, 100,  10, 100,  10,  10,  10, 100, 100, 100, 100,
         10,  10])

您可以通过使用 python 函数 random.choice() 创建随机数列表然后将其转换为张量来实现:

import random 
import torch
list_numbers = random.choices([100,10], k=100) 

random_numbers = torch.Tensor(list_numbers)

print(random_numbers)