repeat和tile都可以用来复制数组的,但是有一些区别
关键区别在于repeat是对于元素的复制,tile是以整个数组为单位的 ,repeat复制时元素依次复制,注意不要用错,区别类似于[1,1,2,2]和[1,2,1,2]
repeat
用法
np.repeat(a, repeats, axis=None)
重复复制数组a的元素,元素的定义与axis有关,axis不指定时,数组会被展开进行复制,每个元素就是一个值,指定axis时,就是aixis指定维度上的一个元素
a= np.array([[1,2],[3,4]])
- 不指定axis,默认None,这时候数组会被展开成1维,再进行复制
np.repeat(a,2)# 所有元素依次复制相同的次数
参数是列表
np.repeat(a,[1,2,1,2])# 如果第二个参数是列表,列表长度必须和a的复制可选元素数目相等,这里都是4
- 指定axis
指定时,就是指定了复制元素沿的维度,这时候就不会把数组展平,会维持原来的维度数
np.repeat(a,2, axi=0)# 所有沿着0维的元素依次复制相同的次数
np.repeat(a,[1,2], axis=1)# 第二个参数是列表,列表长度必须和a的复制可选元素数目相等,这里是2
结果如下,复制元素从第1维度算,可以看到第一列被复制了一次,第二列被复制了两次
tile
用法
np.tile(a, repeats)
复制数组,repeats可以是整数或者元组、数组
- repeats是整数
示例如下,它会将数组复制两份,并且在最后一维将两个元素叠加在一起,数组的维数不变,最后一维根据复制次数加倍 - repeats是列表或元组
如果列表长度是1,和整数时相同。
列表长度不为1时,列表从后向前看,最后一项是2,所以复制两个数组,在最后一维进行叠加,倒数第二项是3,将前步的结果进行复制,并在倒数第二维,结果如下
当列表的长度超过数组的维数时,和前面类似,从后向前复制,复制结果会增加维度与列表的维数匹配,结果如下,在上面的基础上,增加了一维
复制结果的shape
但是对于 简单的单个数组重复,个人更喜欢使用stack和concatenate将同一个数组堆叠起来
参考:numpy的stack、hstack、vstack、concatenate区别及使用建议