1.函數的定義與說明
tile函數是模闆numpy.lib.shape_base中的函數。
函數的形式是tile(A,reps) 函數參數說明中提到A和reps都是array_like的,什麼是array_like的parameter呢?在網上查了一下,始終搞不明白,便把熟悉的python資料類型都試了一下,得出以下結論。 A的類型衆多,幾乎所有類型都可以:array, list, tuple, dict, matrix以及基本資料類型int, string, float以及bool類型。 reps的類型也很多,可以是tuple,list, dict, array, int,bool.但不可以是float, string, matrix類型。 假定A的次元為d,reps的長度為len 當d>=len時,将reps長度補足為d,即在reps前面加上d-len個1。 這裡的意思是,假設A為k維數組,每一維都有一定長度,構成的向量為D。

而長度為len的reps有len個數,進行tile函數運算時補足d位,前面加d-len個1,如下圖所示:
經過tile運算,生成新的A,A的各維次元為:
其中相乘的意思為,将原來A中每一次元的元素進行copy,生成的A中此元素出現次數為新的reps對應次元的數目。操作從低次元向高維進行。 當d 2.函數操作示例 首先給幾個示例: >>> tile(1.3,2) array([ 1.3, 1.3]) array([1, 2, 1, 2, 1, 2]) >>> tile((1,2,3),2) array([1, 2, 3, 1, 2, 3]) >>> a=[[1,2,3],[4,5,5]] >>> tile(a,2) array([[1, 2, 3, 1, 2, 3], [4, 5, 5, 4, 5, 5]]) >>> tile([1,2,3],[2,2,2,2]) array([[[[1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3]],
[[1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3]]],
[[[1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3]],
[[1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3]]]]) 拿其中一個例子進行說明: >>> a=[[1,2],[2,3]] >>> tile(a,2) array([[1, 2, 1, 2], [2, 3, 2, 3]]) 這裡a的次元為2,reps長度為1(僅僅是1個int類型資料) 則将reps長度補足為2,結果為reps = [1,2](這裡也可以寫成reps=(1,2),都無妨的) 進行copy操作,從低維進行.數組a為a[2][2] 一維copy操作:copy兩次。a[0]變為[1,2,1,2],a[1]變為[2,3,2,3] 二維copy操作,copy1次。a變為[[1,2,1,2],[2,3,2,3]] a數組為a[2][4] 如此則不難了解下面的結果: >>> tile(a,[1,2]) array([[1, 2, 1, 2], [2, 3, 2, 3]]) >>> tile(a,[2,2]) array([[1, 2, 1, 2], [2, 3, 2, 3], [1, 2, 1, 2], [2, 3, 2, 3]]) tile(a,[2,2])中是将上述第二步的對a的第二維的copy次數變成了兩次,a[0]copy兩次,a[1]copy兩次:[a[0],a[0],a[1],a[1]]結果如上所示。 3.函數其他注意事項 ①當reps為bool類型或者是bool list類型的時候,與int類型相對應,即True對應為1,False對應為0.如: >>> tile([1,2],[True,False]) array([], shape=(1, 0), dtype=int32) >>> tile([1,2],[True,True]) array([[1, 2]]) >>> tile([1,2],[True,True,True]) array([[[1, 2]]]) >>> tile([1,2],True) array([1, 2]) ②當reps為dict類型時,實則取的是key值清單,且key值清單為升序排列如下所示: >>> tile([1,2,3],{1:2,3:4}) array([[1, 2, 3, 1, 2, 3, 1, 2, 3]]) >>> tile([1,2,3],{3:4,1:2}) array([[1, 2, 3, 1, 2, 3, 1, 2, 3]]) >>> a={1:2,3:4} >>> tile([1,2,3],a.keys()) array([[1, 2, 3, 1, 2, 3, 1, 2, 3]]) ③當A為int,string,float,bool,dict等類型的時候,操作大體相似,都是講A視為一個整體,生成一個與reps的長度相同次元的數組。如下所示: >>> tile({1:2,3:4,5:6},3) array([{1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}], dtype=object) >>> tile({1:2,3:4,5:6},[2,2]) array([[{1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}], [{1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}]], dtype=object) >>> tile('abc',3) array(['abc', 'abc', 'abc'], dtype='|S3') >>> tile('abc',[3,3]) array([['abc', 'abc', 'abc'], ['abc', 'abc', 'abc'], ['abc', 'abc', 'abc']], dtype='|S3') >>> tile(2,3) array([2, 2, 2]) >>> tile(2,[3,3]) array([[2, 2, 2],1.函數的定義與說明
tile函數是模闆numpy.lib.shape_base中的函數。
函數的形式是tile(A,reps)
函數參數說明中提到A和reps都是array_like的,什麼是array_like的parameter呢?在網上查了一下,始終搞不明白,便把熟悉的python資料類型都試了一下,得出以下結論。
A的類型衆多,幾乎所有類型都可以:array, list, tuple, dict, matrix以及基本資料類型int, string, float以及bool類型。
reps的類型也很多,可以是tuple,list, dict, array, int,bool.但不可以是float, string, matrix類型。
假定A的次元為d,reps的長度為len
當d>=len時,将reps長度補足為d,即在reps前面加上d-len個1。
這裡的意思是,假設A為k維數組,每一維都有一定長度,構成的向量為D。
Numpy的tile函數
而長度為len的reps有len個數,進行tile函數運算時補足d位,前面加d-len個1,如下圖所示:
Numpy的tile函數
經過tile運算,生成新的A,A的各維次元為:Numpy的tile函數
其中相乘的意思為,将原來A中每一次元的元素進行copy,生成的A中此元素出現次數為新的reps對應次元的數目。操作從低次元向高維進行。
當d
2.函數操作示例
首先給幾個示例:
>>> tile(1.3,2)
array([ 1.3, 1.3])
array([1, 2, 1, 2, 1, 2])
>>> tile((1,2,3),2)
array([1, 2, 3, 1, 2, 3])
>>> a=[[1,2,3],[4,5,5]]
>>> tile(a,2)
array([[1, 2, 3, 1, 2, 3],
[4, 5, 5, 4, 5, 5]])
>>> tile([1,2,3],[2,2,2,2])
array([[[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]],
[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]]],
[[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]],
[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]]]])
拿其中一個例子進行說明:
>>> a=[[1,2],[2,3]]
>>> tile(a,2)
array([[1, 2, 1, 2],
[2, 3, 2, 3]])
這裡a的次元為2,reps長度為1(僅僅是1個int類型資料)
則将reps長度補足為2,結果為reps = [1,2](這裡也可以寫成reps=(1,2),都無妨的)
進行copy操作,從低維進行.數組a為a[2][2]
一維copy操作:copy兩次。a[0]變為[1,2,1,2],a[1]變為[2,3,2,3]
二維copy操作,copy1次。a變為[[1,2,1,2],[2,3,2,3]]
a數組為a[2][4]
如此則不難了解下面的結果:
>>> tile(a,[1,2])
array([[1, 2, 1, 2],
[2, 3, 2, 3]])
>>> tile(a,[2,2])
array([[1, 2, 1, 2],
[2, 3, 2, 3],
[1, 2, 1, 2],
[2, 3, 2, 3]])
tile(a,[2,2])中是将上述第二步的對a的第二維的copy次數變成了兩次,a[0]copy兩次,a[1]copy兩次:[a[0],a[0],a[1],a[1]]結果如上所示。
3.函數其他注意事項
①當reps為bool類型或者是bool list類型的時候,與int類型相對應,即True對應為1,False對應為0.如:
>>> tile([1,2],[True,False])
array([], shape=(1, 0), dtype=int32)
>>> tile([1,2],[True,True])
array([[1, 2]])
>>> tile([1,2],[True,True,True])
array([[[1, 2]]])
>>> tile([1,2],True)
array([1, 2])
②當reps為dict類型時,實則取的是key值清單,且key值清單為升序排列如下所示:
>>> tile([1,2,3],{1:2,3:4})
array([[1, 2, 3, 1, 2, 3, 1, 2, 3]])
>>> tile([1,2,3],{3:4,1:2})
array([[1, 2, 3, 1, 2, 3, 1, 2, 3]])
>>> a={1:2,3:4}
>>> tile([1,2,3],a.keys())
array([[1, 2, 3, 1, 2, 3, 1, 2, 3]])
③當A為int,string,float,bool,dict等類型的時候,操作大體相似,都是講A視為一個整體,生成一個與reps的長度相同次元的數組。如下所示:
>>> tile({1:2,3:4,5:6},3)
array([{1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}], dtype=object)
>>> tile({1:2,3:4,5:6},[2,2])
array([[{1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}],
[{1: 2, 3: 4, 5: 6}, {1: 2, 3: 4, 5: 6}]], dtype=object)
>>> tile('abc',3)
array(['abc', 'abc', 'abc'],
dtype='|S3')
>>> tile('abc',[3,3])
array([['abc', 'abc', 'abc'],
['abc', 'abc', 'abc'],
['abc', 'abc', 'abc']],
dtype='|S3')
>>> tile(2,3)
array([2, 2, 2])
>>> tile(2,[3,3])
array([[2, 2, 2],
[2, 2, 2],
[2, 2, 2]])
不過有所不同的是,當A為string類型以及dict類型的時候,array數組最後多了一個資訊,即dtype,原因為何,即便看了一些源碼,也不曉得是怎麼回事,好像由array到ndarray,一大堆C的東西,搞不明白,索性作罷。另外,當對list類型進行mat操作然後作為參數A傳入tile時也可以,不過結果類型不是array類型,而是matrix類型了,原因幾何,我也無法解答。
看了tile的源碼以後以上内容差不多都可以了解。例如之是以reps的類型有限制,在于代碼一開始對reps進行了以下操作:
tuple(reps),無法進行該操作的reps參數就會報錯。而且dict類型的reps進行tuple化以後,key值以升序出現,這也是注意事項中2的原因,而list和tuple類型的數值順序不變。 [2, 2, 2], [2, 2, 2]]) 不過有所不同的是,當A為string類型以及dict類型的時候,array數組最後多了一個資訊,即dtype,原因為何,即便看了一些源碼,也不曉得是怎麼回事,好像由array到ndarray,一大堆C的東西,搞不明白,索性作罷。另外,當對list類型進行mat操作然後作為參數A傳入tile時也可以,不過結果類型不是array類型,而是matrix類型了,原因幾何,我也無法解答。 看了tile的源碼以後以上内容差不多都可以了解。例如之是以reps的類型有限制,在于代碼一開始對reps進行了以下操作: tuple(reps),無法進行該操作的reps參數就會報錯。而且dict類型的reps進行tuple化以後,key值以升序出現,這也是注意事項中2的原因,而list和tuple類型的數值順序不變。