在不复制内存的情况下重复一个pytorch张量

Repeating a pytorch tensor without copying memory

pytorch是否支持重复张量而不分配明显更多的内存

假设我们有一个张量

t = torch.ones((1,1000,1000))
t10 = t.repeat(10,1,1)

重复t 10 次将需要占用 10 倍的内存。有没有一种方法可以在不分配更多内存的情况下创建张量 t10

Here 是一个相关问题,但没有答案。

您可以使用torch.expand

t = torch.ones((1, 1000, 1000))
t10 = t.expand(10, 1000, 1000)

请记住 t10 只是对 t 的引用。因此,例如,对 t10[0,0,0] 的更改将导致 t[0,0,0]t10[:,0,0].

的每个成员发生相同的更改

除直接访问外,在 t10 上执行的大多数操作都会导致内存被复制,这会破坏引用并导致使用更多内存。例如:更改设备(.cpu().to(device=...).cuda()),更改数据类型(.float().long().to(dtype=...)),或使用 .contiguous().