为了账号安全,请及时绑定邮箱和手机立即绑定

使用蟒蛇可视化小波系数

使用蟒蛇可视化小波系数

慕无忌1623718 2022-09-20 17:47:50
我需要使用小波变换的细节系数准备一个类似于下图的图。我尝试了超过2周的时间来寻找我该怎么做。此图表示小波变换在不同水平(1、2、3 和 4)下的细节系数。细节系数(cA4,cD4,cD3,cD2,cD1=系数)是一个一维数组,每个数组的大小都不同。<def wavelet(data):    waveletname = 'sym5'    coeffs = wavedec(data, 'sym5', level=5)    cA5,cD5,cD4,cD3,cD2,cD1=coeffs>
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

一种可能的方法是将每个数组绘制为一维图像,每个图像位于不同的y位置。


plt.imshow需要一个 2D 数组,因此将数组的形状重新设置为 1 作为第一维,将原始大小作为第二维,从而生成水平图像。(如果它还不是一个numpy数组,则需要通过)进行转换。通过该参数,可以设置边界 x 和 y 值。 显示每个像素之间的硬边界。 是为了防止设置固定的宽高比。np.array(ci).reshape(1, -1)extentinterpolation='nearest'aspect='auto'


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()

//img1.sycdn.imooc.com//63298c730001059d14610639.jpg

查看完整回答
反对 回复 2022-09-20
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信