PyTorch torch.argwhere-Funktion


Pytorch torch 参考手册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)

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)

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)

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

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)

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.


Pytorch torch 参考手册PyTorch torch-Referenzhandbuch

Weitere Erweiterungen