Fonction torch.slice_scatter de PyTorch
Manuel de référence Pytorch torch
torch.slice_scatterC'est une fonction dans PyTorch utilisée pour disperser les valeurs d'un tenseur source aux positions de tranche du tenseur d'entrée.
Son effet est équivalent àinput[dim][start:end:step] = src, mais il ne modifie pas le tenseur d'origine ; au lieu de cela, il renvoie un nouveau tenseur.
Définition de fonction
torch.slice_scatterLa définition complète de la fonction est la suivante :
torch.slice_scatter(input, src, dim=0, start=None, end=None, step=1)
Description du paramètre
Le tableau suivant répertorietorch.slice_scatterses différents paramètres :
| Paramètre | Type | Requis | Valeur par défaut | Description |
|---|---|---|---|---|
input | Tensor | Requis | — | Tenseur d'entrée, le tenseur à modifier. |
src | Tensor | Requis | — | Tenseur source, les valeurs à disperser dans la tranche d'entrée,sa taille doit correspondre à la taille de la tranche.。 |
dim | int | Optional | 0 | La dimension pour la dispersion. |
start | int | Optional | None | Indice de début (inclusde cet indice), vaut 0 par défaut. |
end | int | Optional | None | Indice de fin (exclude cet indice), vaut la fin par défaut. |
step | int | Optional | 1 | Taille du pas, avec la même signification que step dans le slicing Python. |
Valeur de retour
Renvoie le nouveau tenseur dispersé (torch.Tensor), l'originalinputne sera pas modifié.
Exemples d'utilisation
Les exemples suivants démontrenttorch.slice_scatterson utilisation courante.
Exemple
# Créer un tenseur d'entrée et un tenseur source
input = torch.zeros(8, 4)
src = torch.ones(2, 4)
# Répartir src dans les deux premières lignes de input
output = torch.slice_scatter(input, src, dim=0, end=2)
print("Tenseur d'entrée :")
print(input)
print("\nTenseur source :")
print(src)
print("\nRésultat du scatter :")
print(output)
La sortie est :
输入张量:
tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
源张量:
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
散布结果:
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
Exemple
# Utiliser start et end pour spécifier l'intervalle
input = torch.zeros(10)
src = torch.tensor([1, 2, 3])
# Répartir src aux positions des indices 2-4 de input
output = torch.slice_scatter(input, src, dim=0, start=2, end=5)
print("Entrée :", input)
print("Source :", src)
print("Résultat :", output)
La sortie est :
输入: tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) 源: tensor([1., 2., 3.]) 结果: tensor([0., 0., 1., 2., 3., 0., 0., 0., 0., 0.])
Exemple
# Utiliser le paramètre step
input = torch.zeros(10)
src = torch.tensor([1, 2])
# La taille du pas est 2, de l'indice 0 à 4 (exclu), écrit en fait les indices 0 et 2
output = torch.slice_scatter(input, src, dim=0, start=0, end=4, step=2)
print("Entrée :", input)
print("Source :", src)
print("Résultat avec un pas de 2 :", output)
La sortie est :
输入: tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) 源: tensor([1., 2.]) 步长为2的结果: tensor([1., 0., 2., 0., 0., 0., 0., 0., 0., 0.])
Remarque :
torch.slice_scatterne modifie pas le tenseur d'entrée d'origine, mais renvoie un nouveau tenseur.Cette fonction est
torch.slicel'opération inverse de.
Autres extensions