【Numpy】平铺数组

前言

本篇总结、介绍Numpy数组(ndarray)的基本操作之一——平铺数组 [1]

1. tile

numpy.tile(A, reps):将A沿着指定的轴复制多次

  • A:类数组。输入数组
  • reps:类数组。指示A沿每个轴复制的次数

假设reps的长度为d,输入数据的维度为A.ndim,那么numpy.tile函数返回的数组的维度为max(d, A.ndim):

  • 如果A.ndim<d,那么numpy.tile会为输入数组A添加新的轴,从而将A转换为d维数组。例如,形状为(N,)的数组A会被转化为(1,N)的2维数组、(1,1,N)的3维数组…
  • 如果A.ndim>d,那么numpy.tile会在reps前面添加1,从而将reps转换为A.ndim维数组。例如,数组A的形状为(2,3,4,5),reps为(1,2),那么reps会被转换为(1,1,1,2),表示数组A在前三个轴上不进行复制,在第四个轴上复制2次
>>> arr = np.array([[0,1],[2,3]])
>>> arr
array([[0, 1],
       [2, 3]])
       
>>> np.tile(arr,2)
array([[0, 1, 0, 1],
       [2, 3, 2, 3]])
# 等同于
>>> np.tile(arr,(1,2))
array([[0, 1, 0, 1],
       [2, 3, 2, 3]])

>>> np.tile(arr,(2,2))
array([[0, 1, 0, 1],
       [2, 3, 2, 3],
       [0, 1, 0, 1],
       [2, 3, 2, 3]])

>>> np.tile(arr,(2,1,2))
array([[[0, 1, 0, 1],
        [2, 3, 2, 3]],

       [[0, 1, 0, 1],
        [2, 3, 2, 3]]])
>>> np.tile(np.expand_dims(arr,axis=0),(2,1,2))
array([[[0, 1, 0, 1],
        [2, 3, 2, 3]],

       [[0, 1, 0, 1],
        [2, 3, 2, 3]]])

注释:

如果numpy.tile返回的不是我们想要的结果,我们可以手动对A进行升维或降维。


2. repeat

numpy.repeat(a, repeats, axis=None):逐元素重复数组元素

  • a:类数组。输入数组
  • repeats:整数或整数序列。指示每个元素的重复次数,repeats会被广播从而适配给定轴(axis)的形状
  • axis:整数或None,可选参数。指示沿着哪个轴复制数组元素
    • None:输入数组会被展平,并返回展平的数组
>>> arr = np.array([[0,1],[2,3]])
>>> arr
array([[0, 1],
       [2, 3]])
       
>>> np.repeat(arr,2) # arr会先被展平成array([0, 1, 2, 3]),2会被拓展为[2,2,2,2],以适配每个元素
array([0, 0, 1, 1, 2, 2, 3, 3])
>>> np.repeat(arr,[2,2,2,2]) # 该例清楚地表明2被拓展为了[2,2,2,2]
array([0, 0, 1, 1, 2, 2, 3, 3])

>>> np.repeat(arr,2,axis=0) # 2被拓展为[2,2]
array([[0, 1],
       [0, 1],
       [2, 3],
       [2, 3]])
>>> np.repeat(arr,[1,2],axis=0)
array([[0, 1],
       [2, 3],
       [2, 3]])
       
>>> np.repeat(arr,2,axis=1) # 2被拓展为[2,2]
array([[0, 0, 1, 1],
       [2, 2, 3, 3]])
>>> np.repeat(arr,[1,2],axis=1)
array([[0, 1, 1],
       [2, 3, 3]])

>>> np.repeat(arr,2,axis=3) # numpy.repeat只能在已有的轴上进行元素复制
AxisError: axis 3 is out of bounds for array of dimension 2

>>> np.repeat(2,3) # 可以直接对输入的数复制多次
array([2, 2, 2])

注释:

注意numpy.tile和numpy.repeat的区别。


Reference

[1]: https://numpy.org/doc/stable/reference/routines.array-manipulation.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值