suppose a tensor shape [x, y, z …], I want to interpolate it to [nx, y, z …], every value in dim 0 repeat n times.
For example, I have tensor[2, 3] =
[[1, 2, 3],
[4, 5, 6]]
I want to interpolate it to tensor[6, 3], which is
[[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[4, 5, 6],
[4, 5, 6],
[4, 5, 6]]
every value in dim 0 repeat 3 times, how to achieve it?
Thanks to this post (Repeat examples along batch dimension), I used torch.repeat_interleave to do it.
import torch
torch.manual_seed(0)
shape = x, y = 2, 3
"""
or :
- shape = x, y, z = _, _, _, ...
- shape = x, y, z, t, ... = _, _, _, _, ...
...
"""
n = 3
t = torch.rand(shape)
"""
tensor([[0.4963, 0.7682, 0.0885],
[0.1320, 0.3074, 0.6341]])
"""
t_interpolate = torch.repeat_interleave(t, repeats=n, dim=0)
"""
tensor([[0.4963, 0.7682, 0.0885],
[0.4963, 0.7682, 0.0885],
[0.4963, 0.7682, 0.0885],
[0.1320, 0.3074, 0.6341],
[0.1320, 0.3074, 0.6341],
[0.1320, 0.3074, 0.6341]])
"""
assert t_interpolate.size() == torch.Size([n * shape[0], *shape[1:]])
1 Like