详解numpy的repeat和tile 用来复制数组

2022-10-17 12:19:39

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区别及使用建议

  • 作者:zhiang张
  • 原文链接:https://blog.csdn.net/jonathanzh/article/details/107369901
    更新时间:2022-10-17 12:19:39