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

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维的元素依次复制相同的次数

详解numpy的repeat和tile 用来复制数组_第1张图片

np.repeat(a, [1, 2], axis=1)  # 第二个参数是列表,列表长度必须和a的复制可选元素数目相等,这里是2

结果如下,复制元素从第1维度算,可以看到第一列被复制了一次,第二列被复制了两次
结果

tile

用法

np.tile(a, repeats)

复制数组,repeats可以是整数或者元组、数组

  • repeats是整数
    示例如下,它会将数组复制两份,并且在最后一维将两个元素叠加在一起,数组的维数不变,最后一维根据复制次数加倍
    结果
  • repeats是列表或元组
    如果列表长度是1,和整数时相同。
    列表长度不为1时,列表从后向前看,最后一项是2,所以复制两个数组,在最后一维进行叠加,倒数第二项是3,将前步的结果进行复制,并在倒数第二维,结果如下

详解numpy的repeat和tile 用来复制数组_第2张图片

当列表的长度超过数组的维数时,和前面类似,从后向前复制,复制结果会增加维度与列表的维数匹配,结果如下,在上面的基础上,增加了一维
详解numpy的repeat和tile 用来复制数组_第3张图片
复制结果的shape
在这里插入图片描述
但是对于 简单的单个数组重复,个人更喜欢使用stack和concatenate将同一个数组堆叠起来
参考:numpy的stack、hstack、vstack、concatenate区别及使用建议

你可能感兴趣的:(python学习笔记)