其中
numpy.tile()
torch.repeat()
两者类似,将矩阵或者numpy整体进行扩展:
# numpy.tile()
a
Out[44]:
tensor([[1, 2],
[3, 4]])
np.tile(a,[1,3])
Out[46]:
array([[1, 2, 1, 2, 1, 2],
[3, 4, 3, 4, 3, 4]], dtype=int64)
np.tile(a,[3,1])
Out[47]:
array([[1, 2],
[3, 4],
[1, 2],
[3, 4],
[1, 2],
[3, 4]], dtype=int64)
# torch.Tensor
tensor([[1, 2],
[3, 4]])
a.repeat([1,3])
Out[50]:
tensor([[1, 2, 1, 2, 1, 2],
[3, 4, 3, 4, 3, 4]])
a.repeat([3,1])
Out[51]:
tensor([[1, 2],
[3, 4],
[1, 2],
[3, 4],
[1, 2],
[3, 4]])
可以看出,np.tile(a, [1,3])
和 torch.repeat(a, [1,3])
是将矩阵按列进行扩展,也就是 shape:row, col*3
。扩展方式是将列进行总体的重复。
【3,1】
情况相反。形状:123 123 123
这样。
再看看np.repeat()
和 torch.Tensor.repeat_interleave()
# numpy :
# axis=1,将矩阵行进列扩展repeats 倍数,方式是将每列连续重复
# shape: 111,222,333 这样。
np.repeat(a,repeats=3,axis=1)
Out[55]:
tensor([[1, 1, 1, 2, 2, 2],
[3, 3, 3, 4, 4, 4]])
# 将行进行(axis=0)扩展3 倍,连续重复每行3次。
np.repeat(a,repeats=3,axis=0)
Out[56]:
tensor([[1, 2],
[1, 2],
[1, 2],
[3, 4],
[3, 4],
[3, 4]])
# torch.tensor
# 方法与np.repeat 一样,按dim指定维度进行连续重
# 复每行或者列的方式进行扩展。
a.repeat_interleave(3, dim=1)
Out[59]:
tensor([[1, 1, 1, 2, 2, 2],
[3, 3, 3, 4, 4, 4]])
a.repeat_interleave(3, dim=0)
Out[60]:
tensor([[1, 2],
[1, 2],
[1, 2],
[3, 4],
[3, 4],
[3, 4]])