Spec-Zone.ru › PyTorch 2

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 имеет nn измерений, то результирующий тензор индексов out имеет размер (z×n)(z \times n), где zz — общее количество ненулевых элементов в тензоре input.

Когда as_tuple равно True:

Возвращает кортеж 1-мерных тензоров, по одному для каждого измерения в input, каждый из которых содержит индексы (в этом измерении) всех ненулевых элементов input.

Если input имеет nn измерений, то результирующий кортеж содержит nn тензоров размера zz, где zz — общее количество ненулевых элементов в тензоре 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API