1. 程式人生 > >Numpy中的tile方法

Numpy中的tile方法

在講tile方法之前,先要講一下Numpy陣列中的幾個概念。

在NumPy中,陣列這一類又被稱為ndarray

1、ndarray.ndim

指陣列的維度,即陣列軸(axes)的個數,其數量等於秩(rank)。通俗地講,我們平時印象中的陣列就是一維陣列,維度為1、軸的個數為1、秩也等於1;最常見的矩陣就是二維陣列,維度為2、軸的個數為2(可以理解為由x軸、y軸組成)、秩等於2;我們所知的空間就相當於三維陣列,維度為3、軸的個數為3(x、y、z軸)、秩等於3;以此類推。

2、ndarray.shape

按教程的話翻譯過來是陣列的維度,這樣就很容易和ndim的概念混淆。所以可以這樣理解,shape的返回值是一個元組,元組的長度就是陣列的維數,即ndim

。而元組中每個整數分別代表陣列在其相應維度(/軸)上的大小。以最常見的矩陣為例,print shape後返回(2,3),說明這是一個2行3列的矩陣。


下面說一下tile函式,其原型如下。

原型:numpy.tile(A,reps)

tile共有2個引數,A指待輸入陣列,reps則決定A重複的次數。整個函式用於重複陣列A來構建新的陣列。

假設reps的維度為d,那麼新陣列的維度為max(d,A.ndim)。下面分三種情況進行討論:

(1)A.dim < d

則向A中新增新軸擴充A的維度。維度大小可以從shape中看出,一般通過向shape對應的元組中新增1完成對A維度的擴充。擴充完成後,則可根據reps的值對A中相應維度的值進行重複。

例如,一維陣列shape為(3,),擴充至2維則shape值為(1,3),擴充至3維則shape值為(1,1,3)

(2)A.dim > d

將reps擴充至與A相同的維度。擴充方法同上,也是向shape對應元組中添1,然後再進行重複。

例如,4維陣列A的shape為(2,3,4,5),而reps為(2,2)只有2維,那麼就要對reps添維進行擴充,得到(1,1,2,2)

(3)A.dim = d

 不需要擴充,直接按reps的值對相應維度的值進行重複。

>>>from numpy import *
>>> a = array([1,2,3])
>>>print a.shape
(3.)
>>>print a.ndim
1
>>>b = tile(a,2)
>>>print b
[1 2 3 1 2 3]
>>>print b.shape
(6,)
>>>print b.ndim
1
>>>c = tile(a,(2,3))
>>>print c
[[1 2 3 1 2 3 1 2 3]
 [1 2 3 1 2 3 1 2 3]]
>>>print c.shape
(2,9)
>>>print c.ndim
2

由此可以看出,得到的新陣列的維度由d和A.ndim的大小決定,shape值由擴充後的A和reps相應維度值的乘積得到。