Dans PyTorch, cette distinction donne lieu aux deux méthodes expand()
et repeat()
. La première crée uniquement une nouvelle vue sur le tenseur existant où une dimension de taille un est étendue à une taille plus grande en définissant la foulée sur 0. Toute dimension de taille 1 peut être étendue à une valeur arbitraire sans allocation de nouvelle mémoire. En revanche, ce dernier copie les données d'origine et alloue une nouvelle mémoire.
En PyTorch, vous pouvez utiliser expand()
et repeat()
comme suit pour vos besoins:
import torch
L = 10
N = 20
A = torch.randn(L,L)
A.expand(N, L, L) # specifies new size
A.repeat(N,1,1) # specifies number of copies
En Numpy, il y a une multitude de façons de réaliser ce que vous avez fait ci-dessus d'une manière plus élégante et efficace. Pour votre usage particulier, je recommande np.tile()
sur np.repeat()
, puisque np.repeat()
est conçu pour fonctionner sur les éléments particuliers d'un tableau, tandis que np.tile()
est conçu pour fonctionner sur l'ensemble de la baie. Par conséquent,
import numpy as np
L = 10
N = 20
A = np.random.rand(L,L)
np.tile(A,(N, 1, 1))
'numpy' a' tile' et 'repeat'. Les utiliser peut nécessiter 'M [Aucun, ...]' – hpaulj
Vous pourrez peut-être simplement le diffuser. (Je ne sais pas si PyTorch a déjà diffusé, il a été [implémenté] (https://github.com/pytorch/pytorch/pull/1563) récemment, mais je ne suis pas sûr qu'il soit disponible.) – user2357112
Il y a aussi [ expand] (http://pytorch.org/docs/tensors.html#torch.Tensor.expand), qui est un peu comme la diffusion manuelle. – user2357112