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
下面說一下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的值對相應維度的值進行重複。
由此可以看出,得到的新陣列的維度由d和A.ndim的大小決定,shape值由擴充後的A和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