本教程適合於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位第一類修正的零階貝塞爾函數。