Pytorch - Индексирование нескольких индексов? - PullRequest
2 голосов
/ 05 апреля 2020

Допустим, у меня есть тензор размера [100, 100] и у меня есть набор start_indices и end_indices размера [100]

Я хочу иметь возможность сделать что-то подобное :

tensor[start_indices:end_indices, :] = 0

К сожалению, я получаю сообщение об ошибке, говорящее

TypeError: only integer tensors of a single element can be converted to an index

Так возможно ли это на самом деле без для l oop

1 Ответ

1 голос
/ 05 апреля 2020

Насколько я знаю, это невозможно без некоторого l oop или понимания списка.

Ниже приведены некоторые альтернативы, которые могут быть полезны в зависимости от вашего варианта использования. В частности, если вы хотите повторно использовать одни и те же start_indices и end_indices для нескольких назначений или если у вас есть только одно присвоение на месте для tensor, то следующие решения будут полезны.


Если вместо start_indices и end_indices вам будет предоставлен список индексов, например

row_indices = torch.cat([torch.arange(s, e, dtype=torch.int64) for s, e in zip(start_indices, end_indices)])

, тогда это будет возможно при использовании

tensor[row_indices, :] = 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[mask] = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...