问题描述
基本上,我试图根据随机索引将向量中的元素插入矩阵
size = 100000
answer_count = 4
num_range = int(1e4)
a = torch.randint(-num_range,num_range,size=(size,))
b = torch.randint(-num_range,))
answers = torch.randint(-num_range,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,))
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
的 ALL行。 numpy doc here中有关高级索引的更多信息。