如何根据随机索引数组将向量中的元素插入到矩阵中

How to insert an elements from vector into matrix based on array of random indexes

基本上,我试图根据随机索引将向量中的元素插入到矩阵中

size = 100000
answer_count = 4
num_range = int(1e4)

a = torch.randint(-num_range, num_range, size=(size, ))
b = torch.randint(-num_range, num_range, size=(size, ))
answers = torch.randint(-num_range, num_range, size=(size, answer_count))

for i in range(size): answers[i, np.random.randint(answer_count)] = a[i] + b[i]

我试过

c = a + b
pos = torch.randint(answer_count, size=(size, ))
answers[:, pos] = c

但我确实做错了什么

我认为你需要像这样更改最后一行:

answers[np.arange(size), pos] = c

问题在于高级索引的使用不正确。要了解这些索引的区别,请尝试打印出 answers[:, pos]answers[np.arange(size), pos],您会明白为什么前一个不起作用。 answers[np.arange(size), pos] 选择每个 pos 一行 answers[:, pos] 选择 所有行 每个 pos. numpy doc here.

中有关高级索引的更多信息