Haar将malab从malab转换为Python

时间:2017-06-10 05:16:56

标签: python haar-wavelet

我已经从matlab到python重新创建了一个Haar Tranform矩阵的代码,它在输入n的值为2和4时成功但是当我试图输入8时那里有'是一个错误

" Traceback(最近一次调用最后一次):   文件" python",第20行,in 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

1 个答案:

答案 0 :(得分:0)

我假设你从the wikipedia article或类似的来源得到了haar变换的定义,所以我会尝试坚持他们的符号。

您的代码存在的问题是维基百科文章中使用了轻微的符号滥用。在根据H_2N定义H_N的等式中,两个矩阵堆叠在彼此的顶部,并用括号围绕它们。从技术上讲,这就像一个由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))]))