Fonction torch.argwhere de PyTorch
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)
# 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)
# 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)
# 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
# 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)
# 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.
Autres extensions