python 小波包分解_小波分解示意图

python 小波包分解_小波分解示意图由于最近正好在学习用python进行小波分解,看的英文的pywt库的各种属性和方法及其使用示例,在这里记录下来,方便以后查阅,前面的小波分解部分忘了记录了,就只能从小波包分解开始了。小波包:首先导入pywt库:>>>importpywt一、创建小波包结构:接下来我们实例化一个小波包对象:>>>x=[1,2,3,4,5,6,7,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

由于最近正好在学习用python进行小波分解,看的英文的pywt库的各种属性和方法及其使用示例,在这里记录下来,方便以后查阅,前面的小波分解部分忘了记录了,就只能从小波包分解开始了。
小波包:
首先导入pywt库:

>>> import pywt

Jetbrains全家桶1年46,售后保障稳定

一、创建小波包结构:
接下来我们实例化一个小波包对象:

>>> x = [1, 2, 3, 4, 5, 6, 7, 8]
>>> wp = pywt.WaveletPacket(data=x, wavelet='db1', mode='symmetric')

输入数据和分解系数(细节系数和逼近系数)都可以通过WaveletPacket.data得到:

>>> print(wp.data)
[1, 2, 3, 4, 5, 6, 7, 8]

小波包树的节点由路径标识。标识根节点的路径是’ ‘,根节点的分解层数为0。

>>> print(repr(wp.path))
''
>>> print(wp.level)
0

关于最大分解层数,如果构造函数中没有指定参数,则自动计算。

>>> print(wp['ad'].maxlevel)
3

二、遍历小波包树
获取子节点:

>>> x = [1, 2, 3, 4, 5, 6, 7, 8]
>>> wp = pywt.WaveletPacket(data=x, wavelet='db1', mode='symmetric')

首先要先检查最大分解层数:

>>> print(wp.maxlevel)
3

下面开始获取小波包树的子节点:

  • 1st level
>>> print(wp['a'].data)
[  2.12132034   4.94974747   7.77817459  10.60660172]
>>> print(wp['a'].path)
a
  • 2nd level
>>> print(wp['aa'].data)
[  5.  13.]
>>> print(wp['aa'].path)
aa
  • 3rd level
>>> print(wp['aaa'].data)
[ 12.72792206]
>>> print(wp['aaa'].path)
aaa

以上,我们已经达到了最大分解层数,如果接着往下遍历会产生一个索引错误。

>>> print(wp['aaaa'].data)
Traceback (most recent call last):
...
IndexError: Path length is out of range.

现在我们尝试一下输入错误的路径:

>>> print(wp['ac'])
Traceback (most recent call last):
...
ValueError: Subnode name must be in ['a', 'd'], not 'c'.

产生一个value error。

获取子节点属性:

小波包树对象是一个树状结构,拥有一系列子节点对象。小波包只是节点类中的一个特殊子类。
小波包树的节点可以通过以下操作符来进行访问:obj[x] (Node.__ getitem__()).每一个节点都有一系列属性:data,path,node_name,parent,level,maxlevel 和 mode。

>>> x = [1, 2, 3, 4, 5, 6, 7, 8]
>>> wp = pywt.WaveletPacket(data=x, wavelet='db1', mode='symmetric')
>>> print(wp['ad'].data)
[-2. -2.]
>>> print(wp['ad'].path)
ad
>>> print(wp['ad'].node_name)
d
>>> print(wp['ad'].parent.path)
a
>>> print(wp['ad'].level)
2
>>> print(wp['ad'].maxlevel)
3
>>> print(wp['ad'].mode)
symmetric

提取符合条件的节点:

>>> x = [1, 2, 3, 4, 5, 6, 7, 8]
>>> wp = pywt.WaveletPacket(data=x, wavelet='db1', mode='symmetric')

我们可以按自然顺序得到特定层上的所有节点:

>>> print([node.path for node in wp.get_level(3, 'natural')])
['aaa', 'aad', 'ada', 'add', 'daa', 'dad', 'dda', 'ddd']

或者按频带频率进行排序:

>>> print([node.path for node in wp.get_level(3, 'freq')])
['aaa', 'aad', 'add', 'ada', 'dda', 'ddd', 'dad', 'daa']

注意,WaveletPacket.get_level()也会执行自动分解,直到达到指定的级别。

从小波包树重构信号:

>>> x = [1, 2, 3, 4, 5, 6, 7, 8]
>>> wp = pywt.WaveletPacket(data=x, wavelet='db1', mode='symmetric')

现在新建一个小波包树,并且给它的节点赋一些值。


>>> new_wp = pywt.WaveletPacket(data=None, wavelet='db1', mode='symmetric')

>>> new_wp['aa'] = wp['aa'].data
>>> new_wp['ad'] = [-2., -2.]

为了方便,也可以从节点对象中自动提取数据:

>>> new_wp['d'] = wp['d']

接下来,对aa,ad,d这三个节点包中的数据进行重构。

>>> print(new_wp.reconstruct(update=False))
[ 1.  2.  3.  4.  5.  6.  7.  8.]

如果reconstruct方法中的update参数被设置为False,那么根节点的数据将不会被更新。

>>> print(new_wp.data)
None

否则,根节点的data属性将被设置为重建后的数据。

>>> print(new_wp.reconstruct(update=True))
[ 1.  2.  3.  4.  5.  6.  7.  8.]
>>> print(new_wp.data)
[ 1.  2.  3.  4.  5.  6.  7.  8.]
>>> print([n.path for n in new_wp.get_leaf_nodes(False)])
['aa', 'ad', 'd']
>>> print([n.path for n in new_wp.get_leaf_nodes(True)])
['aaa', 'aad', 'ada', 'add', 'daa', 'dad', 'dda', 'ddd']

从小波包树中移除节点:

>>> x = [1, 2, 3, 4, 5, 6, 7, 8]
>>> wp = pywt.WaveletPacket(data=x, wavelet='db1', mode='symmetric')

首先,从一个二层的小波包树分解开始,树中的子节点是:

>>> dummy = wp.get_level(2)
>>> for n in wp.get_leaf_nodes(False):
...     print(n.path, format_array(n.data))
aa [  5.  13.]
ad [-2. -2.]
da [-1. -1.]
dd [ 0.  0.]
>>> node = wp['ad']
>>> print(node)
ad: [-2. -2.]

要从WP树中删除一个节点,可以使用Python的del obj[x] (node . __ delitem __):

>>> del wp['ad']

于是,树中剩余的节点为:

>>> for n in wp.get_leaf_nodes():
...     print(n.path, format_array(n.data))
aa [  5.  13.]
da [-1. -1.]
dd [ 0.  0.]

如果此时重构信号的话:

>>> print(wp.reconstruct())
[ 2.  3.  2.  3.  6.  7.  6.  7.]

现在恢复删除的节点及其对应的值:

>>> wp['ad'].data = node.data

打印叶子节点和重建后的信号,确认重构信号是正确的。

>>> for n in wp.get_leaf_nodes(False):
...     print(n.path, format_array(n.data))
aa [  5.  13.]
ad [-2. -2.]
da [-1. -1.]
dd [ 0.  0.]
>>> print(wp.reconstruct())
[ 1.  2.  3.  4.  5.  6.  7.  8.]

惰性求值
我的理解是:
Lazy evaluation(惰性求值)的意思是把一个表达式本身存储起来,并不进行求值。需要求值的时候再明确的让它求值。
如:(defparameter temp (+ 2 3))这种情况下,temp等于5
如果用Lazy, (defparameter temp (lazy (+ 2 3)) 这时temp等于一个表达式,再需要对它进行求值的时候用(force temp)把它evaluation。
它显而易见的好处是表达式只需要在需要的时候求值,可以避免了重复的计算。这个说法也不太准确,准确点的好处是在使用递归方法求值时避免了提前进行没有用到的求值。
注意:本节仅用于演示pywt的内部组件。不要依懒于本例中所示的对节点的属性访问。

>>> x = [1, 2, 3, 4, 5, 6, 7, 8]
>>> wp = pywt.WaveletPacket(data=x, wavelet='db1', mode='symmetric')
  • 1 一开始wp的属性a是None。
>>> print(wp.a)
None

要记得千万不要依懒于这种属性访问方式。

  • 2 .首先尝试访问节点,它是通过分解其父节点(wp对象本身)计算出来的。
>>> print(wp['a'])
a: [  2.12132034   4.94974747   7.77817459  10.60660172]
  • 3 .现在wp的属性a已经被设置成了新创建的节点。
>>> print(wp.a)
a: [  2.12132034   4.94974747   7.77817459  10.60660172]

节点d也同样被设置成了新创建的节点。

>>> print(wp.d)
d: [-0.70710678 -0.70710678 -0.70710678 -0.70710678]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/209951.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 苹果手机识别图片文字方法「建议收藏」

    苹果手机识别图片文字方法「建议收藏」识别图片文字的问题相信很多的小伙伴都是经历过的,一般遇到识别图片文字的问题,相信很多人都选择了用电脑打字进行转换,其实还有比这简单一下的方法吗,比如手机可以直接把图片文字识别出来,一起来看看操作方法吧。操作方法:1.先将需要进行文字识别的图片保存在手机里,然后在应用市场里找到OCR文字识别。2.将其运行在文字识别的页面有图片识别和拍照识别,在此选择图片识别。 3.这时会…

  • python表白代码简单「建议收藏」

    python表白代码简单「建议收藏」谢谢大家的支持,您的一键三连是罡罡同学前进的最大动力!一键三连一键三连一键三连一键三连一键三连一键三连python表白代码简单1.首先你要现有python,以及环境配置(自己去网上找资源)2.下载pycharm(相当于Dev、Eclipse编译器)3.复制粘贴即可下面放上源代码:importturtle#str=input(‘请输入表白语:’)str=”糖浆不分离”str1=”2020/12/22~2021/2/16″turtle.speed(

  • 鲲鹏920服务器_华为鲲鹏服务器

    鲲鹏920服务器_华为鲲鹏服务器安装任意Mysql版本都适用配置本地yum源备份原yum库文件并将新配置写入repo文件。#mv/etc/yum.repos.d//etc/yum.repos.d-bak#mkdir/etc/yum.repos.d#echo-e”[kunpeng]\nname=CentOS-kunpeng-Base-mirrors.huaweicloud.com\nbaseurl=https:…

    2022年10月16日
  • Windows AD域功能介绍、Windows AD域方案介绍

    Windows AD域功能介绍、Windows AD域方案介绍WindowsAD域功能介绍、WindowsAD域方案介绍功能一、AD域管理https://www.manageengine.cn/products/ad-manager/1、AD域管理通过批量创建和编辑用户帐户,指派管理权限等,简化WindowsAD域的管理。2、批量管理域用户使用CSV文件批量导入用户、编辑用户属性、重置密码、批量迁移用户和用户对象。3、批量创建域用…

  • jqgrid列表显示时间控件[通俗易懂]

    jqgrid列表显示时间控件[通俗易懂]1.引入时间控件js2.代码editoptions:{dataInit:function(e){$(e).datetimepicker({autoclose:tru…

  • atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform「建议收藏」

    atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号