PyTorch torch.argwhere-Funktion
PyTorch torch-Referenzhandbuch
torch.argwhereist eine Funktion in PyTorch, die verwendet wird, um die Indizes von Elementen zurückzugeben, die eine Bedingung erfüllen. Sie gibt die Indizes von Elementen zurück, deren Wert True (ungleich null) im Eingabe-Tensor ist.
Funktionsdefinition
torch.argwhere(input)
Parameters:
input(Tensor): Der Eingabe-Tensor.
Rückgabewert:
torch.Tensor: Gibt einen 2D-Tensor zurück, jede Zeile ist ein Index eines Elements, das die Bedingung erfüllt.
Anwendungsbeispiele
Beispiel
import torch
# Einen Tensor erstellen
x = torch.tensor([[1, 0, 2],
[0, 3, 0],
[4, 5, 0]])
print("Original-Tensor:")
print(x)
# Die Indizes von Nicht-Null-Elementen zurückgeben
indices = torch.argwhere(x)
print("nIndizes von Nicht-Null-Elementen:")
print(indices)
# Einen Tensor erstellen
x = torch.tensor([[1, 0, 2],
[0, 3, 0],
[4, 5, 0]])
print("Original-Tensor:")
print(x)
# Die Indizes von Nicht-Null-Elementen zurückgeben
indices = torch.argwhere(x)
print("nIndizes von Nicht-Null-Elementen:")
print(indices)
Das Ausgabeergebnis ist:
原始张量:
tensor([[1, 0, 2],
[0, 3, 0],
[4, 5, 0]])
非零元素的索引:
tensor([[0, 0],
[0, 2],
[1, 1],
[2, 0],
[2, 1]])
Beispiel
import torch
# Boolesche Bedingung
x = torch.tensor([[True, False, True],
[False, True, False],
[True, True, False]])
print("Boolescher Tensor:")
print(x)
indices = torch.argwhere(x)
print("nIndizes von True-Werten:")
print(indices)
# Boolesche Bedingung
x = torch.tensor([[True, False, True],
[False, True, False],
[True, True, False]])
print("Boolescher Tensor:")
print(x)
indices = torch.argwhere(x)
print("nIndizes von True-Werten:")
print(indices)
Das Ausgabeergebnis ist:
布尔张量:
tensor([[True, False, True],
[False, True, False],
[True, True, False]])
True 值的索引:
tensor([[0, 0],
[0, 2],
[1, 1],
[2, 0],
[2, 1]])
Beispiel
import torch
# Elemente finden, die einen bestimmten Wert überschreiten
x = torch.randn(3, 4)
threshold = 0
print("Original-Tensor:")
print(x)
# Die Indizes von Elementen finden, die größer als threshold sind
indices = torch.argwhere(x > threshold)
print(f"nIndizes von Elementen, die größer als {threshold} sind:")
print(indices)
# Du kannst auch die Funktion nonzero verwenden, mit demselben Effekt
indices2 = torch.nonzero(x > threshold)
print("nErgebnis unter Verwendung von nonzero:")
print(indices2)
# Elemente finden, die einen bestimmten Wert überschreiten
x = torch.randn(3, 4)
threshold = 0
print("Original-Tensor:")
print(x)
# Die Indizes von Elementen finden, die größer als threshold sind
indices = torch.argwhere(x > threshold)
print(f"nIndizes von Elementen, die größer als {threshold} sind:")
print(indices)
# Du kannst auch die Funktion nonzero verwenden, mit demselben Effekt
indices2 = torch.nonzero(x > threshold)
print("nErgebnis unter Verwendung von nonzero:")
print(indices2)
Das Ausgabeergebnis ist:
原始张量:
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]])
Beispiel
import torch
# 1D-Tensor
x = torch.tensor([1, 0, 0, 4, 0, 5, 0])
indices = torch.argwhere(x)
print("Indizes des 1D-Tensors:")
print(indices.squeeze()) # Die zusätzliche Dimension entfernen
# 1D-Tensor
x = torch.tensor([1, 0, 0, 4, 0, 5, 0])
indices = torch.argwhere(x)
print("Indizes des 1D-Tensors:")
print(indices.squeeze()) # Die zusätzliche Dimension entfernen
Das Ausgabeergebnis ist:
1D张量的索引: tensor([0, 3, 5])
Beispiel
import torch
# Anwendung: Elemente finden, die eine Bedingung erfüllen, und sie ändern
x = torch.randn(5, 5)
# Finde die Indizes aller Elemente, die größer als 0 sind
pos_indices = torch.argwhere(x > 0)
print("Positionen im ursprünglichen Tensor größer als 0:")
print(pos_indices)
# Verwenden Sie diese Indizes, um Werte zu ändern
for idx in pos_indices:
x[idx[0], idx[1]] = 100
print("nGeänderter Tensor:")
print(x)
# Anwendung: Elemente finden, die eine Bedingung erfüllen, und sie ändern
x = torch.randn(5, 5)
# Finde die Indizes aller Elemente, die größer als 0 sind
pos_indices = torch.argwhere(x > 0)
print("Positionen im ursprünglichen Tensor größer als 0:")
print(pos_indices)
# Verwenden Sie diese Indizes, um Werte zu ändern
for idx in pos_indices:
x[idx[0], idx[1]] = 100
print("nGeänderter Tensor:")
print(x)
Hinweis:torch.argwhereJatorch.nonzeroein Alias von, die beiden haben genau dieselbe Funktionalität. Es gibt Elementindizes zurück, jede Zeile entspricht der Position eines Elements, das die Bedingung im ursprünglichen Tensor erfüllt.
Weitere Erweiterungen