繁体   English   中英

使用python从小波系数创建二维数组

[英]create 2D array from wavelets coefficients using python

我需要使用小波变换的细节系数创建类似于下图的二维数组。 我尝试了超过 2 周的时间来寻找如何做到这一点。

在此处输入图片说明

该图表示不同级别(1、2、3、4 和 5)小波变换的细节系数。细节系数(cA5、cD5、cD4、cD3、cD2、cD1=coeffs)是一维数组,每个有不同的大小。 我想使用小波系数创建类似于图像的二维数组,我该怎么做?

coeffs = wavedec(data, 'sym5', level=5)
    cA5,cD5,cD4,cD3,cD2,cD1=coeffs    
    for i, ci in enumerate(coeffs):
        plt.imshow(ci.reshape(1, -1), extent=[0, 2000, i + 0.5, i + 1.5], cmap='inferno', aspect='auto', interpolation='nearest')
    plt.ylim(0.5, len(coeffs) + 0.5) 
    plt.yticks(range(1, len(coeffs) + 1), ['cA5', 'cD5', 'cD4', 'cD3', 'cD2', 'cD1'])
    plt.show()

答案比您想象的要容易。

只需从for循环中取出plt.show()

import pywt
import numpy as np
import matplotlib.pyplot as plt
data=np.random.rand(4000)
coeffs = pywt.wavedec(data, 'sym5', level=5)
cA5,cD5,cD4,cD3,cD2,cD1=coeffs    
for i, ci in enumerate(coeffs):
    plt.imshow(ci.reshape(1, -1), extent=[0, 2000, i + 0.5, i + 1.5],     cmap='inferno', aspect='auto', interpolation='nearest')
    plt.ylim(0.5, len(coeffs) + 0.5) 
    plt.yticks(range(1, len(coeffs) + 1), ['cA5', 'cD5', 'cD4', 'cD3', 'cD2', 'cD1'])
plt.show()

这将允许您更新您的数字:

在此处输入图片说明


编辑:

如果您将plt.show()留在循环中,它将为每个系数提供单独的图,如下所示:

在此处输入图片说明

引用matplotlib 的介绍

需要注意的一件事:plt.show() 命令应该在每个 Python 会话中仅使用一次,并且最常出现在脚本的最后。 多个 show() 命令会导致不可预测的后端相关行为,应尽量避免。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM