[英]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()
留在循环中,它将为每个系数提供单独的图,如下所示:
需要注意的一件事:plt.show() 命令应该在每个 Python 会话中仅使用一次,并且最常出现在脚本的最后。 多个 show() 命令会导致不可预测的后端相关行为,应尽量避免。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.