Fonction torch.argwhere de PyTorch


Pytorch torch 参考手册Manuel de référence PyTorch torch

torch.argwhereest une fonction dans PyTorch utilisée pour renvoyer les indices des éléments qui satisfont une condition. Elle renvoie les indices des éléments dont la valeur est True (non nulle) dans le tenseur d'entrée.

Définition de fonction

torch.argwhere(input)

Parameters:

  • input(Tensor) : Le tenseur d'entrée.

Valeur de retour:

  • torch.Tensor: Renvoie un tenseur 2D, chaque ligne est un indice d'un élément qui satisfait la condition.

Exemples d'utilisation

Exemple

import torch

# Créer un tenseur
x = torch.tensor([[1, 0, 2],
                  [0, 3, 0],
                  [4, 5, 0]])

print("Tenseur d'origine :")
print(x)

# Renvoyer les indices des éléments non nuls
indices = torch.argwhere(x)

print("nIndices des éléments non nuls :")
print(indices)

Le résultat de sortie est:

原始张量:
tensor([[1, 0, 2],
        [0, 3, 0],
        [4, 5, 0]])

非零元素的索引:
tensor([[0, 0],
        [0, 2],
        [1, 1],
        [2, 0],
        [2, 1]])

Exemple

import torch

# Condition booléenne
x = torch.tensor([[True, False, True],
                  [False, True, False],
                  [True, True, False]])

print("Tenseur booléen :")
print(x)

indices = torch.argwhere(x)
print("nIndices des valeurs True :")
print(indices)

Le résultat de sortie est:

布尔张量:
tensor([[True, False, True],
        [False, True, False],
        [True, True, False]])

True 值的索引:
tensor([[0, 0],
        [0, 2],
        [1, 1],
        [2, 0],
        [2, 1]])

Exemple

import torch

# Trouver les éléments supérieurs à une certaine valeur
x = torch.randn(3, 4)
threshold = 0

print("Tenseur d'origine :")
print(x)

# Trouver les indices des éléments supérieurs au seuil
indices = torch.argwhere(x > threshold)

print(f"nIndices des éléments supérieurs à {threshold} :")
print(indices)

# Vous pouvez également utiliser la fonction nonzero, avec le même effet
indices2 = torch.nonzero(x > threshold)
print("nRésultat en utilisant nonzero :")
print(indices2)

Le résultat de sortie est:

原始张量:
tensor([[-1.2345,  0.5678, -0.8901,  1.2345],
        [ 0.3456, -0.6789,  0.9012, -0.1234],
        [-0.5678,  1.2345, -0.3456,  0.7890]])

大于 0 的元素索引:
tensor([[0, 1],
        [0, 3],
        [1, 0],
        [1, 2],
        [2, 1],
        [2, 3]])

使用 nonzero 的结果:
tensor([[0, 1],
        [0, 3],
        [1, 0],
        [1, 2],
        [2, 1],
        [2, 3]])

Exemple

import torch

# tenseur 1D
x = torch.tensor([1, 0, 0, 4, 0, 5, 0])

indices = torch.argwhere(x)
print("Indices du tenseur 1D :")
print(indices.squeeze())  # Supprimer la dimension supplémentaire

Le résultat de sortie est:

1D张量的索引:
tensor([0, 3, 5])

Exemple

import torch

# Application : trouver les éléments qui satisfont une condition et les modifier
x = torch.randn(5, 5)

# Trouver les indices de tous les éléments supérieurs à 0
pos_indices = torch.argwhere(x > 0)

print("Positions supérieures à 0 dans le tenseur d'origine :")
print(pos_indices)

# Utiliser ces indices pour modifier les valeurs
for idx in pos_indices:
    x[idx[0], idx[1]] = 100

print("nTenseur modifié :")
print(x)

Remarque :torch.argwhereOuitorch.nonzeroun alias de, les deux ont exactement la même fonctionnalité. Il renvoie les indices des éléments, chaque ligne correspond à la position d'un élément satisfaisant la condition dans le tenseur d'origine.


Pytorch torch 参考手册Manuel de référence PyTorch torch

Autres extensions