Numpy.tile() 函数的作用

一、文档
numpy.tile(A, reps):

  Construct an array by repeating A the number of times given by reps.

  If reps has length d, the result will have dimension of max(d, A.ndim).

  If A.ndim < d, A is promoted to be d-dimensional by prepending new axes. 
  So a shape (3,) array is promoted to (1, 3) for 2-D replication, or shape (1, 1, 3) for 3-D replication. 
  If this is not the desired behavior, promote A to d-dimensions manually before calling this function.

  If A.ndim > d, reps is promoted to A.ndim by pre-pending 1’s to it. 
  Thus for an A of shape (2, 3, 4, 5), a reps of (2, 2) is treated as (1, 1, 2, 2).

  Note : Although tile may be used for broadcasting, it is strongly recommended to use numpy’s broadcasting operations and functions.
二、说明

tile 函数有两个参数 A 和 reps。

tile这个函数是用来构造一个数组,内容按规则 reps (元组) 来重复参数 A (数组)

如果 reps 的长度是 d,那么生成结果的维度是 max(d,A.ndim)。A.ndim 表示参数 A 数组的维度。

  1. 如果 A.ndim < d,那就在 A 的前面加上新的维度使其达到 d 维。

  2. 如果 A.ndim > d,reps 就要在现有元素前面插入1,使它的长度达到 A.ndim。再对 A 进行重复。

注意!!!这里的执行顺序很重要:元组 reps 数字从左到右,数组 A 维度从最低(外层)维度到最高(内层)维度。见下面例子分析。

三、例子
例子 1

输入:

import numpy as np
a = np.array([0, 1, 2])
np.tile(a, 2)

输出:

array([0, 1, 2, 0, 1, 2])

分析:

这里的参数 A 就是 [0, 1, 2],维度是 1。参数 reps 是 2,它的长度是1。A.ndim = d,不用改变维度,直接重复 A 两次得到[0, 1, 2, 0, 1, 2]。

例子 2

输入:

a = np.array([0, 1, 2])
np.tile(a, (2, 2))

输出:

array([[0, 1, 2, 0, 1, 2],
       [0, 1, 2, 0, 1, 2]])

分析:

参数 A 还是 [0,1,2],维度是 1。参数 reps 是 (2, 2),它的长度是 2。A.ndim < d, max(d,A.ndim)=2,就表示构造的结果要升维变成 2 维了。那么具体是怎么重复A呢?首先第1个维度(最低维度)重复 A 两次(reps的第一个2),同时升为2维,变为 [[0,1,2,0,1,2]];然后再将这个结果在第 2 个维度(高维度)重复两次(reps的第二个2)变为 [[0,1,2,0,1,2],[0,1,2,0,1,2]]。

例子 3

输入:

a = np.array([0, 1, 2])
np.tile(a, (2, 1, 2))

输出:

array([[[0, 1, 2, 0, 1, 2]],
       [[0, 1, 2, 0, 1, 2]]])

分析:

参数 A 还是 [0,1,2],维度是 1。参数 reps 是(2,1,2)它的长度是3。A.ndim < d,max(d,A.ndim)=3,所以构造的结果需要升维到 3。首先在第1维度(最低维度)重复2次且升维得[[[0,1,2,0,1,2]]];再在第2维度重复1次,也就是它本身得[[[0,1,2,0,1,2]]];最后在第3维度(最高)重复2次得[[[0,1,2,0,1,2]],[[0,1,2,0,1,2]]]。

例子 4

输入:

b = np.array([[1, 2], [3, 4]])
np.tile(b, 2)

输出:

array([[1, 2, 1, 2],
       [3, 4, 3, 4]])

分析:

参数 A 是 [[1,2], [3,4]],维度是 2。参数 reps 是 2,长度是1。A.ndim > d,max(d,A.ndim)=2,所以在 reps 前面插入 1 得 (1,2),再对 A 重复。首先第1维(最低维度)重复1次得 [[1, 2], [3, 4]] ,再在高维度重复2次得 [[1,2,1,2],[3,4,3,4]] 。

例子 5

输入:

b = np.array([[1, 2], [3, 4]])
np.tile(b, (2, 1))

输出:

array([[1, 2],
       [3, 4],
       [1, 2],
       [3, 4]])

分析:

参数 A 是 [[1, 2], [3, 4]],维度是 2。参数 reps 是(2, 1),长度是2。A.ndim = d,不用升维。首先低维度重复2次得 [[1, 2], [3, 4],[1, 2], [3, 4]],再在高维度重复1次得 [[1, 2], [3, 4],[1, 2], [3, 4]]

例子 6

输入:

c = np.array([1,2,3,4])
np.tile(c,(4,1))

输出:

array([[1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4]])

分析:

参数 A 是 [1,2,3,4],维度是 1。参数 reps 是 (4,1),长度是 2。A.ndim < d,max(d,A.ndim)=2,结果需要升维到2。首先在低维度重复4次得 [[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]],再在高维度重复1次得 [[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]。


THE END.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值