从 Matlab 到 Python 的 Haar 变换矩阵
Haar Transform matric from Matlab to Python
我已经从 matlab 到 python 重新创建了一个 Haar 变换矩阵的代码,它在输入 2 和 4 的 n 值时成功,但是当我尝试输入 8 时出现错误
"回溯(最近调用最后):
文件 "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
我假设你从 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))]))
我已经从 matlab 到 python 重新创建了一个 Haar 变换矩阵的代码,它在输入 2 和 4 的 n 值时成功,但是当我尝试输入 8 时出现错误
"回溯(最近调用最后): 文件 "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
我假设你从 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))]))