1. 程式人生 > >[Python]numpy中tile函式的用法

[Python]numpy中tile函式的用法

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型別的數值順序不變。

轉載自http://blog.sina.com.cn/s/blog_6bd0612b0101cr3u.html

相關推薦

[Python]numpytile函式用法

1.函式的定義與說明 tile函式是模板numpy.lib.shape_base中的函式。 函式的形式是tile(A,reps) 函式引數說明中提到A和reps都是array_like的,什麼是array_like的parameter呢?在網上查了一下,始終搞不明白,便把熟

Numpytile函式用法

tile函式的功能是重複某個陣列,位於Numpy模組numpy.lib.shape_base中 下邊通過具體例子來說明tile函式的具體用法: 1、通過一個數字來說明重複的次數 #!/usr/bin/env python # -*- coding:utf-8 -*- from numpy

Numpy tile函式用法

titl函式: a=arange(1,3) #a的結果是: array([1,2]) 1,當 tile(a,1) 時: tile(a,1) #結果是 array([1,2]) tile(a,2) #結果是 array([1,2,1,2]) tile(a,3)

#Python第三方模組學習(二)——numpyloadtxt函式用法詳解

本篇系轉載文章,並在原文的基礎上補充引數delimeter的說明 umpy中有兩個函式可以用來讀取檔案,主要是txt檔案, 下面主要來介紹這兩個函式的用法 第一個是loadtxt, 其一般用法為 numpy.loadtxt(fname, dtype=, commen

numpyflatten()函式用法

flatten是numpy.ndarray.flatten的一個函式,其官方文件是這樣描述的: ndarray.flatten(order='C') Return a copy of the array collapsed into one dimension. Parameters:

Python Numpyreshape函式引數-1的含義

新陣列的shape屬性應該要與原來陣列的一致,即新陣列元素數量與原陣列元素數量要相等。一個引數為-1時,那麼reshape函式會根據另一個引數的維度計算出陣列的另外一個shape屬性值。 下面來舉幾個

Python Numpyreshape函式引數-1的含義

新陣列的shape屬性應該要與原來陣列的一致,即新陣列元素數量與原陣列元素數量要相等。一個引數為-1時,那麼reshape函式會根據另一個引數的維度計算出陣列的另外一個shape屬性值。下面來舉幾個例子來理解一下:>>> z = np.array([[1,

numpyargsort函式用法

>>> import numpy >>> help(numpy.argsort) Help on function argsort in module numpy.core.fromnumeric: argsort(a, axis=-1, kind='quicksort',

numpytile函式用法

tile函式位於python模組 numpy.lib.shape_base中,他的功能是重複某個陣列。比如tile(A,n),功能是將陣列A重複n次,構成一個新的陣列,我們還是使用具體的例子來說明問題 ①先來引入numpy下的所有方法 from numpy import *

Python擴充套件庫numpywhere()函式的三種用法 Python擴充套件庫numpywhere()函式的三種用法

原 Python擴充套件庫numpy中where()函式的三種用法 2018年06月25日 07:43:56 Python_小屋 閱讀數:1000

numpy函式tile函式用法

tile函式位於python模組 numpy.lib.shape_base中,他的功能是重複某個陣列。比如tile(A,n),功能是將陣列A重複n次,構成一個新的陣列 from numpy import * #initialize the array a = [0,1,2]

Pythonsplit()函式用法和例項

一、描述 split()通過指定分隔符對字串進行切片,如果引數num 有指定值,則僅分隔 num 個子字串 函式形式:str.split(str="", num=string.count(str)) 引數: str -- 分隔符,預設為所有的空字元,包括空格、換行(\n)、製表

【轉】Python關鍵語法-閉包:函式函式用法例項

本文例項講述了Python閉包的用法。分享給大家供大家參考,具體如下: Python函式中也可以定義函式,也就是閉包。跟js中的閉包概念其實差不多,舉個Python中閉包的例子。 def make_adder(addend): def adder(augend

Numpyargsort()函式用法

argsort()函式的作用是將陣列按照從小到大的順序排序,並按照對應的索引值輸出。 argsort()函式中,當axis=0時,按列排列;當axis=1時,按行排列。如果省略預設按行排列。 下邊通過例子來說明其用法: #!/usr/bin/env python # -*- codi

Numpysum函式的使用方法(Python自帶sum函式

Numpy中sum函式(Python自帶sum函式)的作用是對元素求和。 無參時,所有全加; axis=0,按列相加; axis=1,按行相加; 下邊通過例子來說明其用法: #!/usr/bin/env python # -*- coding:utf-8 -*-

Python之陣列(array)使用方法總結與Numpy的陣列用法

Python: array使用方法: Type code C Type Minimum size in bytes ‘c’ character          1

python print 函式用法總結

出自:http://www.cnblogs.com/graceting/p/3875438.html Python 思想: “一切都是物件!” 在 Python 3 中接觸的第一個很大的差異就是縮排是作為語法的一部分,這和C++等其他語言確實很不一樣,所以要小心 

Pythonformat函式用法說明

格式描述 %%百分號標記 %c字元及其ASCII碼 %s字串 %d有符號整數(十進位制) %u無符號整數(十進位制) %o無符號整數(八進位制) %x無符號整數(十六進位制) %X無符號整數(十六進位

Pythonzip()函式用法舉例

定義:zip([iterable, ...]) zip()是Python的一個內建函式,它接受一系列可迭代的物件作為引數,將物件中對應的元素打包成一個個tuple(元組),然後返回由這些 tuples組成的list(列表)。若傳入引數的長度不等,則返回list的長度和引數

pythonrange()函式用法

1、range範圍: range 範圍是左閉右開區間, range(i,j) 相當於 [i,j)。 程式設計時要注意邊界問題 >>> for i in range(6,12):  print(i) 6 7 8 9 10 11 2、關於引數 >>> range(1,5