首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab的“`mdwtdec()”与Python的“`wavedec()”

Matlab的“`mdwtdec()”与Python的“`wavedec()”
EN

Stack Overflow用户
提问于 2016-02-01 21:26:34
回答 1查看 1.2K关注 0票数 1

我正在尝试将Matlab代码转换为Python。为了实现多信号一维小波分解,在Matlab中使用了mdwtdec() .我在python中找到的最接近的函数是pywt lib,wavedec()

而matlab函数采用4个参数mdwtdec(DIRDEC,X,LEV,WNAME):这里X是信号,LEV是电平,WNAME是小波名,DIRDEC是方向指示符:r (行)或c (列)。

mdwtdec(DIRDEC,X,LEV,WNAME)在矩阵X的每一行(如果DIRDEC = r)或每列(如果DIRDEC = c)的水平上返回小波分解,使用小波WNAME.

在小波变换中,wavedec(X,LEV,WNAME)采用与Matlab相似的XLEVWNAME。该方向没有选项,因此默认情况下它被设置为'r‘。我也需要“c”作为选项,如何在Python中实现它?

EN

回答 1

Stack Overflow用户

发布于 2016-02-04 02:50:06

pywtwavedec假设信号是一个数组,如果信号不是数组,那么结果就不那么令人信服了(对于方阵,结果似乎与逐行运算相对应,而对于非方阵则不是这样)。

幸运的是,您可以使用wavedec对每一行或每列运行apply_along_axis。使用一些额外的包装,您可以定义一个Matlab近似(Matlab的版本可能有更好的错误处理)到mdwtdec,例如:

代码语言:javascript
复制
import pywt
import numpy as np
def mdwtdec(dirdec,x,lev,wavelet):
    """
    Multisignal 1D Discrete Wavelet decomposition.

    Parameters
    ----------
    dirdec  : char
        Direction indicator: 'r' (row) or 'c' (column)
    x       : matrix
        Input matrix
    wavelet : Wavelet object or name string
        Wavelet to use
    lev     : int
        Decomposition level (must be >= 0). If level is None then it
        will be calculated using the ``dwt_max_level`` function.
    """
    return np.apply_along_axis(
        lambda y: np.concatenate(pywt.wavedec(y, wavelet, level=lev)),
        axis={'c':0, 'r':1}[dirdec], arr=x)

我用过:

  • 将逼近系数和细节系数保持为紧行/列向量的np.concatenate
  • 一个lambda表达式,用于指定执行的函数以及输入参数的映射
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35140645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档