1、Tensor.repeat()和Tensor.tile()用法类似。
a = torch.tensor([[1,2,3],
[4,5,6]])
a.repeat(2,2)
# 针对该维度的所有值进行复制
# 新维度(2 * 2, 2 * 3)
tensor([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6],
[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
a.tile(2,2)
# 效果一样
# 新维度(2 * 2, 2 * 3)
tensor([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6],
[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
# 当复制的维度大于a时
a.repeat(3,2,2)
# 新维度(3 * 1, 2 * 2, 2 * 3)
tensor([[[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6],
[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]],
[[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6],
[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]],
[[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6],
[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]]])
# tile效果一样,不在演示, a.repeat(3,2,2) = a.repeat([3,2,2])
2、numpy.repeat()用法
b = np.array([[1,2,3],
[4,5,6]])
b.repeat(3,axis = 1)
# 每一列复制3 - 1次,每列共3个重复
array([[1, 1, 1, 2, 2, 2, 3, 3, 3],
[4, 4, 4, 5, 5, 5, 6, 6, 6]])
# 指定每列复制次数
b.repeat([2,3,2],axis = 1)
# 2次重复 , 3次重复, 2次重复。
array([[1, 1, 2, 2, 2, 3, 3],
[4, 4, 5, 5, 5, 6, 6]])
# axis = 0, 表示按行(第一个维度),axis = 1,表示按列(第二个维度),以此类推。
b.repeat([2,3],axis = 0)
array([[1, 2, 3],
[1, 2, 3],
[4, 5, 6],
[4, 5, 6],
[4, 5, 6]])