Numpy基礎教程—其它相關函數

本教程適合於numpy基礎入門,更多詳盡內容請閱讀官網http://www.numpy.org/,此篇爲numpy基礎學習教程系列之其它相關函數篇,傾向於實踐用法,後續還會推出一系列numpy其它方面的教程,歡迎廣大圈友一起交流學習,並指出其中的錯誤。

 

注意:以下np爲import numpy as np中的np標識符

 

 

傅里葉變換

 

    np.fft.fft(array):對信號array進行傅里葉變換

    np.fft.ifft(transformed):還原信號

    注意:numpy.linalg模塊中的fftshift函數可以將FFT輸出中的直流分量移動到頻譜的中央,ifftshift函數是其逆操作

 

 

 

 

排序函數

 

    numpy.lexsort函數支持對數組按指定行或列的順序排序,是間接排序,lexsort不修改原數組,返回索引。

    注意:如果參數爲元組,最後一個作爲主要的排序的key,倒數第二個作爲次要的排序的key

    注意:對於多維數組排序,默認按最後一行元素由小到大排序,返回最後一行元素排序後索引所在位置。返回的索引數組ind,則a[ind]就是排序後的數組。

 

import numpy as np

>>> a

array([[2,  7,  4,  2],

       [35,  9,  1,  5],

       [22,12,  3,  2]])

 

按最後一列順序排序

>>>a[np.lexsort(a.T)]

 

array([[2,  7,  4,  2],

       [35,  9,  1,  5],

       [22,12,  3,  2]])

 

按最後一列逆序排序

>>>a[np.lexsort(-a.T)]

array([[35,  9,  1,  5],

       [2,  7,  4,  2],

       [22,12,  3,  2]])

 

按第一列順序排序

>>> a[np.lexsort(a[:,::-1].T)]

array([[2,  7,  4,  2],

       [22,12,  3,  2],

       [35,  9,  1,  5]])

 

按最後一行順序排序

>>>a.T[np.lexsort(a)].T

array([[2,  4,  7,  2],

       [5,  1,  9, 35],

       [2,  3, 12, 22]])

 

按第一行順序排序

>>>a.T[np.lexsort(a[::-1,:])].T

array([[2,  2,  4,  7],

       [5, 35,  1,  9],

       [2, 22,  3, 12]]

 

np.sort(array):對數組array進行排序,返回排序後的視圖,並不改變原數組。

array.sort():對數組array進行排序,原地排序。

np.msort(array):對數組array進行排序,返回排序後的視圖,並不改變原數組。

np.argsort(array):間接排序,返回排序後的索引數組。

np.sort_complex(complex_numbers):對複數進行排序,先按照實部後虛部的順序進行排序。

 

 

 

 

網格函數

 

np.meshgrid用於從數組a和b產生網格。生成的網格矩陣A和B大小是相同的。它也可以是更高維的。

[A,B]=np.meshgrid(a,b)
生成size(b)* size(a)大小的矩陣A和B。它相當於a從一行重複增加到size(b)行,把b轉置成一列再重複增加到size(a)列。因此命令等效於:

A=np.mat(np.ones(np.size(b))).T*a;
B=np.mat(b).T*np.ones(np.size(a))

 

如下所示:

>> a=np.arange(1,3,1)

a =

     1     2

>> b=np.arange(3,6,1)

b =

     3     4     5

>> [A,B]=meshgrid(a,b)

A =

     1     2
     1     2
     1     2


B =

     3     3
     4     4
     5     5

 

>> [B,A]=meshgrid(b,a)

B =

     3     4     5
     3     4     5


A =

     1     1     1
     2     2     2

 

 

計算卷積

 

numpy.convolve(a,v, mode=’full’):numpy函數中的卷積函數庫
參數: 
  a:(N,)輸入的一維數組 
  b:(M,)輸入的第二個一維數組 
  mode:{‘full’, ‘valid’, ‘same’}參數可選 
    ‘full’ 默認值,返回每一個卷積值,長度是N+M-1,在卷積的邊緣處,信號不重疊,存在邊際效應。 
    ‘same’ 返回的數組長度爲max(M, N),邊際效應依舊存在。 
    ‘valid’  返回的數組長度爲max(M,N)-min(M,N)+1,此時返回的是完全重疊的點,邊緣點無效。

公式:

 

 

其中,k-m 0,m 0,k的最大值爲N+M-2

 

實例:

    a = np.arange(4)

    b = np.array([2,3,1,5])

    print np.convolve(a,b)

結果:[0,2,7,13,16,13,15]

 

 

自定義ufunc函數

 

 

np.frompyfunc(func,nin,nout):將一個計算單個元素的函數轉換爲ufunc函數。

  參數:func—函數

       nin—輸入參數的個數

       nout—func返回值的個數

實例:

 

def triangle_wave(x,c,c0,hc):

    x= x-int(x)    #週期爲1,取小數部分計算

    ifx>=c:

        R=0.0

    elif:x<c0:

        R = x/c0*hc

    else:

        r = (c-x)/(c-c0)*hc

    returnr

 

triangle_wave_ufunc =np.frompyfunc(triangle_wave,4,1)

x = np.linspace(0,2,100)

y2 = triangle_wave_ufunc(x,0.6,0.4,1.0)

注意:triangle_wave_ufunc所返回數組的元素類型是object,因此還需要調用數組的astype()方法將其轉換爲雙精度浮點數組。

 

 

 

 

 

np.vectorize()函數

 

使用vectorize( )可以實現和frompyfunc()類似的功能,但它可以通過otypes參數指定返回數組的元素類型。otypes參數可以是一個表示元素類型的字符串,也可以是一個類型列表,使用列表可以描述多個返回數組的元素類型,如將上面的代碼改成vectorize(),則爲:

triangle_wave_vec = np.vectorize(triangle_wave,otypes=[np.float])

x = np.linspace(0,2,100)

y3 = triangle_wave_vec(x,0.6,0.4,1.0)
 

 

窗函數:窗函數是信號處理領域常用的數學函數,這些窗函數在給定的區間之外取值爲0

 

巴特利特窗是一種三角形平滑窗

window = np.bartlett(42)

 布萊克曼窗形式上爲三項餘弦值的加和

 

black = np.blackman(num):該函數唯一的參數就是輸出點的數量,如果數量爲0或小於0,則返回一個空數組。

 

 

 

漢明窗(Hammingwindow)形式上是一個加權的餘弦函數,公式如下:

Numpy中的hamming函數返回漢明窗。該函數唯一的參數就是輸出點的數量,如果參數爲0或小於0,則返回一個空數組。

 

凱澤窗是以貝塞爾函數定義的,公式如下:

這裏的I0即爲零階的貝塞爾函數。NumPy中的kaiser函數返回凱澤窗。該函數的第一個參數爲輸出點的數量。如果數量爲0或小於0,則返回一個空數組。第二個參數爲β值。

注意:np.i0(array):i0位第一類修正的零階貝塞爾函數。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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