python numpy-tile函数

搞懂一个函数,最简单的就是看官方文档,官方文档如下:

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.

Parameters
----------
A : array_like
    The input array.
reps : array_like
    The number of repetitions of `A` along each axis.

Returns
-------
c : ndarray
    The tiled output array.

See Also
--------
repeat : Repeat elements of an array.
broadcast_to : Broadcast an array to a new shape

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

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

>>> 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]])

tile怎么执行的,即如下的规律:

1.首先看数组的维度和元组的维度是否相同,如果相同,下一步,如果不同,把维度较小的那个前面补1,直到两者维度相同(例如数组shape为(4,),元组是(2,3),那就把数组扩充为(1,4),若元组是(2,3,2),那就把数组扩充为(1,1,4))。
2.经过1之后,现在两者维度已经相同了,把数组的某个维度重复对应的元组维度那么多次(元组数字从右到左对应数组维度从最里层到最外层)。

看不懂没关系,讲几个例子,再看一下上面的规则,就明白了。

例子:

1.维度相同

>>> a = np.array([0, 1, 2])
>>> np.tile(a, 2)   维度都是1
array([0, 1, 2, 0, 1, 2])

>>> a = np.array([[0, 1],[2,3]])
>>> np.tile(a, (2,3))    #维度都是2
array([[0, 1, 0, 1,  0, 1],
   [2, 3,  2, 3, 2, 3],
   [0, 1, 0, 1,  0, 1],
   [2, 3,  2, 3, 2, 3]])

在这里插入图片描述

>>>a = np.array([[0, 1],[2,3],[4,5]])
>>>np.tile(a,(2,3))
array([[0, 1, 0, 1, 0, 1],
   [2, 3, 2, 3, 2, 3],
   [4, 5, 4, 5, 4, 5],
   [0, 1, 0, 1, 0, 1],
   [2, 3, 2, 3, 2, 3],
   [4, 5, 4, 5, 4, 5]])

2.数组维度小于元组维度

>>> a = np.array([0, 1, 2])
>>> np.tile(a,(2,2))  #a:[0, 1, 2]-->[[0, 1, 2]],维度都是2了,就可以了
array([[0, 1, 2, 0, 1, 2],
   [0, 1, 2, 0, 1, 2]])

3.数组维度大于元组维度

>>> a = np.array([[0, 1, 2],[3,4,5]])
>>> np.tile(a,2)   #元组2-->(1,2) 维度都是2了,现在可以了
array([[0, 1, 2, 0, 1, 2],
   [3,4,5,3,4,5]])

猜你喜欢

转载自blog.csdn.net/xiaohuihui1994/article/details/83795906