torch.nonzero
-
torch.nonzero(input, *, out=None, as_tuple=False) → LongTensor or tuple of LongTensors -
Примечание
torch.nonzero(..., as_tuple=False)(по умолчанию) возвращает 2-мерный тензор, где каждая строка — индекс для ненулевого значения.torch.nonzero(..., as_tuple=True)возвращает кортеж 1-мерных тензоров индексов, позволяющий выполнять продвинутую индексацию, поэтомуx[x.nonzero(as_tuple=True)]даёт все ненулевые значения тензораx. Из возвращаемого кортежа каждый тензор индексов содержит ненулевые индексы для определенного измерения.Для получения более подробной информации см. ниже.
Когда
inputнаходится на CUDA,torch.nonzero()вызывает синхронизацию хост-устройство.Когда
as_tupleравноFalse(по умолчанию):Возвращает тензор, содержащий индексы всех ненулевых элементов
input. Каждая строка результата содержит индексы ненулевого элемента вinput. Результат отсортирован лексикографически, при этом последний индекс изменяется быстрее (стиль C).Если
inputимеет измерений, то результирующий тензор индексовoutимеет размер , где — общее количество ненулевых элементов в тензореinput.Когда
as_tupleравноTrue:Возвращает кортеж 1-мерных тензоров, по одному для каждого измерения в
input, каждый из которых содержит индексы (в этом измерении) всех ненулевых элементовinput.Если
inputимеет измерений, то результирующий кортеж содержит тензоров размера , где — общее количество ненулевых элементов в тензореinput.В качестве специального случая, когда
inputимеет ноль измерений и ненулевое скалярное значение, он обрабатывается как одномерный тензор с одним элементом.- Параметры
-
input (Tensor) — входной тензор.
- Ключевые аргументы
-
out (LongTensor, необязательно) — выходной тензор, содержащий индексы
- Возвращает
-
Если
as_tupleравноFalse, выходной тензор, содержащий индексы. Еслиas_tupleравноTrue, один 1-мерный тензор для каждого измерения, содержащий индексы каждого ненулевого элемента вдоль этого измерения. - Тип возвращаемого значения
-
LongTensor или кортеж LongTensor
Пример:
>>> torch.nonzero(torch.tensor([1, 1, 1, 0, 1])) tensor([[ 0], [ 1], [ 2], [ 4]]) >>> torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0], ... [0.0, 0.4, 0.0, 0.0], ... [0.0, 0.0, 1.2, 0.0], ... [0.0, 0.0, 0.0,-0.4]])) tensor([[ 0, 0], [ 1, 1], [ 2, 2], [ 3, 3]]) >>> torch.nonzero(torch.tensor([1, 1, 1, 0, 1]), as_tuple=True) (tensor([0, 1, 2, 4]),) >>> torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0], ... [0.0, 0.4, 0.0, 0.0], ... [0.0, 0.0, 1.2, 0.0], ... [0.0, 0.0, 0.0,-0.4]]), as_tuple=True) (tensor([0, 1, 2, 3]), tensor([0, 1, 2, 3])) >>> torch.nonzero(torch.tensor(5), as_tuple=True) (tensor([0]),)
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nonzero.html