【问题标题】:Haar Transform matric from Matlab to Python从 Matlab 到 Python 的 Haar 变换矩阵
【发布时间】:2017-11-12 04:22:00
【问题描述】:

我已经从 matlab 到 python 重新创建了 Haar Tranform 矩阵的代码,在输入 2 和 4 的 n 值时成功,但是当我尝试输入 8 时出现错误

"Traceback(最近一次调用最后一次): 文件“python”,第 20 行,在 ValueError:形状太大而不能成为矩阵。”

这是我的代码

import numpy as np
import math

n=8 

# check input parameter and make sure it's the power of 2
Level1 = math.log(n, 2)
Level = int(Level1)+1

#Initialization
H = [1]
NC = 1 / math.sqrt(2)    #normalization constant
LP = [1, 1]
HP = [1,-1]

for i in range(1,Level):

  H = np.dot(NC, [np.matrix(np.kron(H, LP)), np.matrix(np.kron(np.eye(len(H)), HP))])


print H

【问题讨论】:

  • 请考虑在散文中使用标点符号

标签: python haar-wavelet


【解决方案1】:

我假设您从 the wikipedia article 或类似来源获得了 haar 变换的定义,所以我会尽量坚持他们的符号。

您的代码的问题是在维基百科文章中使用了轻微的符号滥用。在用H_N 定义H_2N 的等式中,两个矩阵堆叠在一起,周围有括号。从技术上讲,这类似于由 2 个数组组成的数组,但它们意味着它是单个数组,其中值的上半部分等于一个矩阵,下半部分等于另一个矩阵。

在您的代码中,两个矩阵的数组是以下部分:

[np.matrix(np.kron(H, LP)), np.matrix(np.kron(np.eye(len(H)), HP))]

您可以使用np.concatenate 函数将其制成如上所述的单个矩阵,如下所示:

  H = np.dot(NC, np.concatenate([np.matrix(np.kron(H, LP)), np.matrix(np.kron(np.eye(len(H)), HP))]))

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2019-10-14
    • 2018-08-12
    相关资源
    最近更新 更多