使用 python 可视化小波系数
Visualization of wavelets coefficients using python
我需要使用小波的细节系数来准备类似于下图的图transform.I我已经尝试了 2 个多星期才能找到如何做到这一点。
此图表示不同级别(1、2、3 和 4)的小波变换的细节系数。细节系数(cA4、cD4、cD3、cD2、cD1=coeffs)是一维数组每个都有不同的大小。
<
def wavelet(data):
waveletname = 'sym5'
coeffs = wavedec(data, 'sym5', level=5)
cA5,cD5,cD4,cD3,cD2,cD1=coeffs
>
一种可能的方法是将每个数组绘制为一维图像,每个都在不同的 y 位置。
plt.imshow
需要一个二维数组,因此将数组重新整形为第一维为 1,第二维为原始大小,从而得到水平图像。 (如果还不是numpy数组,需要通过np.array(ci).reshape(1, -1)
转换)。通过 extent
参数,可以设置边界 x 和 y 值。 interpolation='nearest'
显示每个像素之间的硬边界。 aspect='auto'
需要防止 imshow 设置固定的宽高比。
from matplotlib import pyplot as plt
import numpy as np
# generate six random 1d arrays of different sizes
coeffs = [np.random.uniform(0, 1, np.random.randint(30, 100)) for i in range(6)]
# cA5, cD5, cD4, cD3, cD2, cD1 = coeffs
for i, ci in enumerate(coeffs):
plt.imshow(ci.reshape(1, -1), extent=[0, 1000, i + 0.5, i + 1.5], cmap='inferno', aspect='auto', interpolation='nearest')
plt.ylim(0.5, len(coeffs) + 0.5) # set the y-lim to include the six horizontal images
# optionally relabel the y-axis (the given labeling is 1,2,3,...)
plt.yticks(range(1, len(coeffs) + 1), ['cA5', 'cD5', 'cD4', 'cD3', 'cD2', 'cD1'])
plt.show()
我需要使用小波的细节系数来准备类似于下图的图transform.I我已经尝试了 2 个多星期才能找到如何做到这一点。
此图表示不同级别(1、2、3 和 4)的小波变换的细节系数。细节系数(cA4、cD4、cD3、cD2、cD1=coeffs)是一维数组每个都有不同的大小。
<
def wavelet(data):
waveletname = 'sym5'
coeffs = wavedec(data, 'sym5', level=5)
cA5,cD5,cD4,cD3,cD2,cD1=coeffs
>
一种可能的方法是将每个数组绘制为一维图像,每个都在不同的 y 位置。
plt.imshow
需要一个二维数组,因此将数组重新整形为第一维为 1,第二维为原始大小,从而得到水平图像。 (如果还不是numpy数组,需要通过np.array(ci).reshape(1, -1)
转换)。通过 extent
参数,可以设置边界 x 和 y 值。 interpolation='nearest'
显示每个像素之间的硬边界。 aspect='auto'
需要防止 imshow 设置固定的宽高比。
from matplotlib import pyplot as plt
import numpy as np
# generate six random 1d arrays of different sizes
coeffs = [np.random.uniform(0, 1, np.random.randint(30, 100)) for i in range(6)]
# cA5, cD5, cD4, cD3, cD2, cD1 = coeffs
for i, ci in enumerate(coeffs):
plt.imshow(ci.reshape(1, -1), extent=[0, 1000, i + 0.5, i + 1.5], cmap='inferno', aspect='auto', interpolation='nearest')
plt.ylim(0.5, len(coeffs) + 0.5) # set the y-lim to include the six horizontal images
# optionally relabel the y-axis (the given labeling is 1,2,3,...)
plt.yticks(range(1, len(coeffs) + 1), ['cA5', 'cD5', 'cD4', 'cD3', 'cD2', 'cD1'])
plt.show()