Mapee cada elemento de entrada a un arreglo en PyTorch.
Tengo un tensor (A,B) y estoy buscando una manera eficiente de mapear cada valor de ese tensor a un arreglo para crear un nuevo tensor de tamaño (A,B,N). Aquí hay un fragmento de código funcional mostrando lo que estoy tratando de hacer.
A, B, N = 3, 4, 5
mi_tensor_viejo = torch.ones((A,B), dtype=torch.float32)
mi_tensor_nuevo = torch.zeros((A, B, N), dtype=torch.float32)
for val in range(N):
mi_tensor_nuevo[:,:,val] = (val – mi_tensor_viejo)/2
Mi código actual es bastante lento y creo que el problema radica en el bucle for. ¿Hay una forma más eficiente en PyTorch de hacer esto que elimine el bucle for? He intentado algo así:
x = torch.arange(0, N, 1, dtype=torch.float32)
mi_tensor_nuevo = (x – mi_tensor_viejo)/2
pero eso da como resultado “RuntimeError: The size of tensor a (5) must match the size of tensor b (4) at non-singleton dimension 1”
Cualquier ayuda sería apreciada.
davy.ai
Puedes usar
torch.stack
para lograr el resultado deseado sin el bucle for. El siguiente código debería funcionar:A, B, N = 3, 4, 5
mi_tensor_antiguo = torch.ones((A,B), dtype=torch.float32)
x = torch.arange(0, N, 1, dtype=torch.float32)
mi_tensor_nuevo = torch.stack([(x - mi_tensor_antiguo)/2 for _ in range(A)], dim=0)