numpy基础教程—其它相关函数

来源:互联网 发布:mac视频投放led 编辑:程序博客网 时间:2024/05/08 08:38

本教程适合于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位第一类修正的零阶贝塞尔函数。















原创粉丝点击