filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
灌云ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!
例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:
def is_odd(x):
return x % 2 == 1
然后,利用filter()过滤掉偶数:
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
结果:
[1, 7, 9, 17]
利用filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串:
def is_not_empty(s):
return s and len(s.strip()) 0
filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])
结果:
['test', 'str', 'END']
注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。
当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下:
a = ' 123'
a.strip()
'123'
a = '\t\t123\r\n'
a.strip()
'123'
练习:
请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
方法:
import math
def is_sqr(x):
return math.sqrt(x) % 1 == 0
print filter(is_sqr, range(1, 101))
结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
T=wpdec(y,5,'db40');
%信号y进行波包解层数5T波树plot看
a10=wprcoef(T,[1,0]);
%a10节点[1,0]进行重构信号貌似没层重构说吧能某层某节点进行重构节点编号波树
%以下为滤波程序(主要调节参数c的大小)
c=10;
wn=0.1;
fs=50000; %采样频率;
b=fir1(c,wn/(fs/2),hamming(c+1));
y1=filtfilt(b,1,y);%对y滤波。
对滤波的 总结 : 对特定频率进行有效提取,并对提取部分进行特定的处理(增益,衰减,滤除)的动作被叫做滤波。
最常用的滤波器类型有三种: 通过式(Pass),搁架式(Shelving)和参量式(Parametric)。 滤波器都有一个叫 参考频率(Reference Frequency)的东西 ,在不同类型的滤波器中,具体的叫法会有所不同。
通过式滤波器可以让参考频率一侧的频率成分完全通过该滤波器,同时对另一侧的频率成分做线性的衰减,就是,一边让通过,一边逐渐被滤除。在信号学中,通过的区域被称为通带,滤除的区域被叫做阻带,在通过式滤波器中,参考频率通常被称为截止频率。
高通滤波器(high-pass filters):让截止频率后的高频区域通过,另一侧滤除,低通滤波器(low-pass filters):让截止频率前的低频区域通过,另一侧滤除,通
以下是高通滤波器与低通滤波器的核心参数:
截止频率(Cut-off frequency) :决定了通带(通过的频率部分)与阻带(阻止的频率部分)的分界曲线,截止频率的位置并非是在曲线开始弯曲的那个点,而是在-3dB的位置。以图2左侧的高通滤波器为例,截止频率点之上的部分频率并没有全部被通过,而是有个曲线,在曲线回归平直后其频率才被完全通过。至于为什么要将-3dB的位置设为截止频率,是因为-3dB对于滤波器的设计而言是个非常重要的位置,如果设为其他位置,则会让通过式滤波器的设计变得尤为复杂。
斜率(Slope) :表示的是通带与阻带的分界曲线的倾斜程度,也就是说斜率决定了分界曲线是偏向平缓的,还是偏向垂直的,斜率越大(更陡峭),人工处理的痕迹就越明显。斜率的单位为dB/oct,中文称为分贝每倍频程。虽然绕口,但其实很简单,如6dB/oct,意思为一个倍频程的距离会产生6dB的衰减,数字滤波器常见的斜率选择有6dB/oct,12dB/oct,18dB/oct,24dB/oct,30dB/oct等等(图3)。
scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)
scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')
这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下和400hz以上频率成分,即截至频率为10hz和400hz,则wn1=2*10/1000=0.02,wn2=2*400/1000=0.8。Wn=[0.02,0.8]
SciPy提供了firwin用窗函数设计低通滤波器,firwin的调用形式如下:
firwin(N, cutoff, width=None, window='hamming')
其中N为滤波器的长度;cutoff为以正规化的频率;window为所使用的窗函数。