Python Pyrotch使用索引列表修改数组
假设我有一个索引列表,并希望使用此列表修改现有数组。目前我唯一能做到这一点的方法是使用for循环,如下所示。只是想知道是否有更快/更有效的方法Python Pyrotch使用索引列表修改数组,python,pytorch,Python,Pytorch,假设我有一个索引列表,并希望使用此列表修改现有数组。目前我唯一能做到这一点的方法是使用for循环,如下所示。只是想知道是否有更快/更有效的方法 torch.manual_seed(0) a = torch.randn(5,3) idx = torch.Tensor([[1,2], [3,2]], dtype=torch.long) for i,j in idx: a[i,j] = 1 我最初认为collect或index\u select会在一定程度上回答这个问题,但看看这个似乎不是答
torch.manual_seed(0)
a = torch.randn(5,3)
idx = torch.Tensor([[1,2], [3,2]], dtype=torch.long)
for i,j in idx:
a[i,j] = 1
我最初认为collect
或index\u select
会在一定程度上回答这个问题,但看看这个似乎不是答案
在我的特殊情况下,a是一个5维向量,idx是一个Nx5向量。所以我期望的输出(在使用类似于a[idx]
的东西订阅之后)是一个(N,)
形向量
答复
感谢下面的@shai,我寻求的答案是:
a[idx.t().chunk(chunks=2,dim=0)]
。摘自此。非常简单
a[idx[:,0], idx[:,1]] = 1
你可以在中找到一个更一般的解决方案。即使假设a有5个维度,也会按此比例缩放。在接受之前,我们将拭目以待,看看是否有更一般的答案。抱歉,添加额外的要求太晚了。@sachinruk请查看添加的链接。