Pytorch-为一系列多个索引编制索引?
假设我有一个大小为[100100]的张量,我有一组大小为[100]的Pytorch-为一系列多个索引编制索引?,pytorch,Pytorch,假设我有一个大小为[100100]的张量,我有一组大小为[100]的start\u索引和end\u索引 我希望能够做到以下几点: 张量[开始索引:结束索引,:]=0 不幸的是,我在说 TypeError:只有单个元素的整数张量可以转换为索引 那么,如果没有for循环,这真的是可能的吗?据我所知,如果没有某种循环或列表理解,这是不可能的 下面是一些可能有用的替代方案,具体取决于您的用例。特别是,如果您希望对多个作业重复使用相同的start\u索引和end\u索引,或者如果您希望只对tensor执行
start\u索引
和end\u索引
我希望能够做到以下几点:
张量[开始索引:结束索引,:]=0
不幸的是,我在说
TypeError:只有单个元素的整数张量可以转换为索引
那么,如果没有for循环,这真的是可能的吗?据我所知,如果没有某种循环或列表理解,这是不可能的
下面是一些可能有用的替代方案,具体取决于您的用例。特别是,如果您希望对多个作业重复使用相同的start\u索引
和end\u索引
,或者如果您希望只对tensor
执行一个就地作业,那么下面的解决方案将非常有用
例如,如果给您的不是start\u索引
和end\u索引
,而是索引列表
row_indices = torch.cat([torch.arange(s, e, dtype=torch.int64) for s, e in zip(start_indices, end_indices)])
那么,使用
tensor[row_indices, :] = 0
tensor[mask] = 0
或者给你一个面具
mask = torch.zeros(tensor.shape, dtype=torch.bool, device=tensor.device)
for s, e in zip(start_indices, end_indices):
mask[s:e, :] = True
那么,使用
tensor[row_indices, :] = 0
tensor[mask] = 0
不仍然需要for循环。这部分真的很慢。如果可能的话,我想避免for循环。正如我的答案开头所示,据我所知,pytorch不支持为同一维度使用多个开始/结束标记进行索引,任何解决方案都需要某种形式的循环。如果您不需要计算每次迭代的索引,这里提供的解决方案可能会很有用,但一般来说不一定会更快。我最终编写了自己的cuda内核,它基本上是30倍快。是的,我曾考虑将其作为一个潜在的解决方案提出来,但没有时间真正编写一个。如果可能的话,可以发布你的cuda内核作为你问题的答案吗?这将是非常有用的!很抱歉,这是特定领域的。我可能会在某个时候写一个广义的