es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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)

Comments are closed.