Numpy

1.ndarray對象

一、創建數組

1.shape():獲得數組的形狀,它是一個描述數組各個軸長度的元組(tuple)。

2.reshape():可以創建指定形狀的新數組,而原數組的形狀保持不變。兩個數組其實共享數據存儲空間,因此修改其中任意一個數組的元素都會同時修改另一個數組的內容。

3.數組的元素類型可以通過dtype屬性獲得。如:c.dtype,也可以通過dtype參數在創建數組時指定元素類型。如:np.array([1,2,3,4],dtype=np.float。

np支持的數據類型:int8, int16, int32, int64, unit8(無符號的整數,unit8是0~255), unit16~64, float32, 64, complex64, 128, boolean。字母表示數字類型(dtype),後面的數字表示位數,即數值在內存中所佔的bit的數目。還有int, float和complex,其位數取決於平臺類型,即16或者32位,complex也是,不過因爲是兩個float表示的,所以位數是64或者128。還有更高級的類型。

轉換數據類型:y=np.int_([1,2,3]),返回一個np的array。

4.np.arange(開始值,終值,步長)

5.linspace()通過指定開始值,終值和元素個數創建便是等差數列的以爲數組,可以通過endpoint參數指定是否包含終值,默認是true。

logspace()創建的數組時等比數列。

6.zeros()、ones()、empty()可以創建指定形狀和類型的數組。其中:empty()僅僅分配數組所使用的內存,不對數組元素進行初始化操作,因此它的運行速度是最快的。zeros()將數組初始化爲0,ones()將數組初始化爲1。

如:array=np.zerzos((n,m)),創建了n行m列的零矩陣。

array=np.empty((n,m),np.int)

7.frombuffer()、fromstring()、fromfile()等函數可以從字節序列或文件創建數組。如:s=”abcdefgh”

np.fromstring(s,dtype=np.int8)

8.fromfunction()通過函數創建數組,它的第一個參數爲計算每個數組元素的函數,第二個參數指定數組的形狀。

9. arange,類似range,參數可以是小數或者負數。

10.矩陣的轉置:numpy.transpose()

11.數組的tolist()方法,將其轉換爲python的標準浮點數列表。x.tolist()


二、存取元素

1.切片:a[n:m],通過切片獲取的新數組是原始數組的一個視圖。

2.整數列表對數組元素進行存取,使用列表中的每個元素作爲下標,使用列表作爲下標得到的數組不和原始數組共享數據。如:x=[1,2,3,4,5,6,7,8,9];b=x[[3,3,-3,8]]

3.使用整數數組作爲數組下標。如:x=np.arange(10,1,-1);x[np.array([3,3,1,8])]。當下標是多維數組時,則得到的也是多維數組。

4.使用布爾數組作爲下標存取數組,將手機數組中所謂數組中對應下標爲true的元素。(注意:這種方式只對應於布爾數組,不能使用布爾列表)如:x=np.arange(5,0,-1);x[np.array([True,False,True,Fslse,False])]#布爾數組。X[[True,False,True,Fslse,False]]#布爾列表,True代表1,False代表0


三、多維數組(存取元素去一維相同)

1.slice對象,s_對象


四、結構數組

1.和C語言一樣,在Numpy中有也很容易對這樣的結構數組進行操作。只要Numpy中的結構定義和C語言中的結構定義相同,就可以很方便的讀取C語言的結構數組的二進制數據,將其轉換爲Numply的結構數組。

如:

import numpy as np

persontype=np.dtype({

                     'names':['name','age','weight'],

                     'formats':['S32','i','f']},align=True)

a=np.array([("zhang",32,75.5),("wang",24,65.2)],dtype=persontype)

2.ufunc運算

一、四則運算

y=x1+x2:np.add(x1,x2[,y])

y=x1-x2:np.subtract(x1,x2[,y])

y=x1*x2:np.multiple(x1,x2[,y])

y=x1/x2:np.divide(x1,x2[,y])#如果兩個數組的元素爲整數,那麼用整數除法。

np.true_divide(x1,x2[,y])#總是返回精確的商

np.floor_divide(x1,x2[,y])#總是對返回值取整


二、比較和布爾運算

1.y=x1==x2:equal(x1,x2[,y])

y=x1!=x2:not_equal(x1,x2[,y])

y=x1<x2:less(x1,x2[,y])

y=x1<=x2:less_equal(x1,x2[,y])

y=x1>x2:great(x1,x2[,y])

y=x1>=x2:great_equal(x1,x2[,y])

(由於Python中的布爾運算使用and,or和not等關鍵字,它們無法被重載,因此數組的布爾運算只能通過相應的ufunc函數進行。這些函數都以“logical_”開頭,在IPython中使用自動補全功能可以很容易找到它們。)不太懂

2.all(),any()方法

以“bitwise_”開頭的函數式比特運算函數,也可以使用“&”,“~”,“|”和“^”。位運算符的優先級比比較運算符高。


三、自定義的ufunc函數

1.通過fromyfunc()可以將計算單個值的函數轉換爲一個能對數組中每個數組中每個元素進行計算的ufunc函數,調用格式:fromyfunc(func,nin,nout),其中func是計算單個元素的函數,nin是func輸入參數的個數,nout是func返回值的個數。

2.vectorize()


四、廣播

1.廣播處理:(1)讓所有輸入數組都向其中爲數最多的數組看齊,shape屬性中不足的部分都通過在前面加1補齊;(2)輸出數組的shape屬性石輸入數組的shape屬性在各個軸上的最大值;(3)如果輸入數組的某個軸長度爲1或與輸出數組對應軸的長度相同,這個數組就能夠用來計算,否則出錯;(4)當輸入數組的某個軸長度爲1時,沿着此軸運算時都用此軸上的第一組值。

2.ogrid對象,x,y=np.ogrid[:5,:5] x=array([[0],[1],[2],[3],[4]])y=array([[0,1,2,3,4]])

3.mgrid對象,返回的是x,y進行廣播處理後的數組。


五、ufunc函數的方法

1.reduce()方法是沿着axis參數指定的軸對數組進行操作,相當於將<op>運算符插入到沿axis軸的所有元素之間。<op>.reduce(array,axis=0,dtype=none)

如:np.add.reduce([1,2,3])=6

2.accumulate()和reduce()相似,只是它返回的數組和輸入數組的形狀相同,保存所有的中間計算結果。

3.reduceat()

4.outer()


3.龐大的數據庫

一、求和、平均值、方差

1.np.sum(a,axis),sum()計算數組元素之和,也可以對列表、元組等和數組類似的序列進行求和,當數組是多維時,它計算數組中所有元素的和。如果指定參數axis,求和運算將沿着指定的軸進行。

2.mean()用於求數組的平均值。np.mean(a,axis,dtype,out)。對於整數數組,它使用雙精度浮點數進行計算,而對於其他類型的數組則使用和數組類型相同的累加變量進行計算。average()也可以求平均值,它沒有out和dtype參數,但有一個指定每個元素權值的weights參數。

3.std()和var()分別計算數組的標準差和方差,有axis、out及dtype等參數。


二、最值和排序

min(a,out,axis):求最小值

max(a,out,axis):求最大值

ptp(a,out,axis):計算最大值和最小值之間的差

argmax()和argmin()可以求最大值和最小值的下標

sort(a,axis)用於數組排序,axis默認值爲-1

argsort()返回數組的排序下標,axis參數的默認值爲-1

median()可以獲得數組的中值


三、多項式函數

1.poly1d()將悉數轉換爲poly1d(一元多項式)對象。例如f(x)=X^3-2*x+1,所以係數a=np.array([1.0,0,-2,1])

2.對象式對象的deriv()和integ()方法分別計算多項式函數的微分和積分。

3.多項式函數的根可以使用roots()函數計算。

4.poly()函數可以將根轉換回多項式的係數。

5.polyfit()函數可以對一組數據使用多項式函數進行擬合,找到和這組數據最接近的多項式係數。


四、分段函數

1.x=where(condition,y,z),其中condition,y,z都是數組,它的返回值是一個形狀與condition相同的數組,當condition中的某個元素爲True時,數組x中對應下標的值從數組y中獲取,否則從數組z獲取。如果y和z是單個的數值或者它們的形狀與condition的不同,將先通過廣播運算使其形狀一致。

2.隨着分段的增多,需要嵌套更多的層的where(),但不易於閱讀,可以用select()解決。

select(condlist,choicelist,default=0),其中,condist是一個長度爲N的布爾數組列表,choicelist是一個長度爲N的儲存候選值得數組列表,所有數組的長度都爲M。(不太明白)


五、統計函數

1.unique()返回其參數數組中所有不同的值,並且按照從小到大的順尋排列,它有兩個參數:return_index:True表示同時返回原始數組的下標,return_inverse:True表示返回重建原始數組用的下標數組。如:a=[1,1,9,5,2,6,7,6,2,9];x,idx=np.unique(a,return_index=True),x=[1,2,5,6,7,9],idx=[0,4,3,5,6,2]

x,ridx=np.unique(a,return_inverse=True),ridx=[0,0,5,2,1,3,4,3,1,5]

2.bincount()對整數數組中各個元素出現的次數進行統計,它要求數組中所有元素都是非負的,其返回數組中第i個元素的值表示整數i在參數數組中出現的次數。

np.bincount(a)=[0,2,2,0,0,1,2,1,0,2]

bincount(x,weights),weights參數可以指定每個數對應的權值,返回數組x中每個整數對應的w中的權值之和。

3.histogram(a,bins=10,range=None,norms=False,weights=None)對以爲數組進行直方圖統計。a是保存待統計數據數組,bins指定統計的區間個數,range是一個長度爲2的元組,表示統計範圍的最小值和最大值,默認值爲None,當normed參數爲False時,函數返回數組a中的數據在每個區間的個數,否則對個數進行正規化處理,使它等於每個區間的概率密度。weights參數和bincount()類似。histogram()返回兩個一維數組——hist和bin_edges,第一個是每個區間的統計結果,第二個上是分割的區間範圍。

 

4.線性代數

一、各種乘積運算

1.dot():對於兩個一維數組,計算的是這兩個數組對應下標元素的乘積和。對於二維數組,計算的是兩個數組的矩陣乘積;對於多維數組,他的通用計算公式如下:dot(a,b)[I,j,k,m]=sum(a[I,j,:]*b[k,:,m])

2.inner:和dot乘積一樣,對於兩個一維數組,計算的是這兩個數組對應下標元素的乘積之和。對於多維數組,它計算的結果數組中的每個元素都是:數組a和b最後一維的內積,因此數組a和b最後一維的長度必須相同。inner(a,b)[I,j,k,m]=sum(a[I,j,:]*b[k,m,:])

3.outer:只按照一維數組進行計算,如果傳入參數是多維數組,先將此數組展平爲一維數組,然後再進行運算。


二、解線性方程組

inv()計算逆矩陣,solve(0求解多元一次方程組。

 

5.文件存取

1.tofile():可以方便地將數據以二進制格式寫進文件。它輸出的數據不保存數組形狀和元素類型等信息,因此用fromfile()函數讀回數據時需要用戶指定元素內型,並對數組的形狀進行適當的修改。a=np.arange(0,12);a.shape=3,4;a.tofile(“a.bin”);b=np.fromfile(“a.bin”,dtype=np.int32);b.shape=3,4,這是a和b相等了

2.load()和save()用Numpy專用的二進制格式保存數據,它們會自動處理元素類型和形狀。

3.savez():將多個數組保存到一個文件中,第一個參數是文件名,其後的參數都是需要保存的數組,輸出的是一個擴展名爲npz的壓縮文件。

4.savatxt()和loadtxt()可以讀寫保存一維和二維數組的文本文件。

 

6.內存映射數組

內存映射數組使用memmap()創建,它的調用參數如下:

memmap(filename,dtype=uint8,mode=“r+”,offset=0,shape=None,order=“C”)

filename:存儲數組的文件名,除了“w+”模式之間,文件必須存在,並且已經儲存有數據。

dtype:Numpy的數據類型,可以是內置的數據類型,也可以是用戶自己定義的結構類型。

offset:文件中存儲數據的起始位置,以字節爲單位。

mode:文件操作模式,“r”表示只讀,“c”表示可以修改數組但不寫入文件,“r+”表示可以對數組進行讀寫,並自動將結果保存迴文件,“w+”表示創建文件或覆蓋已有的文件。

order:元素排列格式,“C”表示C語言格式,“F”表示Fortran語言格式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章