2017-06-10 104 views
1

我重新創建了一個Haar Tranform矩陣的代碼從matlab到python它是一個成功的輸入2和4的n值,但當我試圖輸入8有一個錯誤哈爾從Matlab轉換矩陣到Python

「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 
+0

請:

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

如下可以使爲一個矩陣此以上使用np.concatenate函數如所描述的考慮在你的散文 –

回答

0

我假設你得到了哈爾的定義從the wikipedia article或類似源的變換,所以我會盡力堅持自己的符號。

您的代碼存在的問題是在維基百科文章中使用了輕微的符號濫用。在根據H_N定義H_2N的等式中,將兩個矩陣堆疊在彼此之上並且圍繞它們具有括號。從技術上講,這將是一個由兩個數組組成的數組,但它們表示它是一個單一數組,其中上半部分的值等於一個矩陣,下半部分等於另一個矩陣。

在代碼中,兩個矩陣的陣列是如下部分:

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

中使用標點符號! @FlorianK! :) 非常感謝你! – r0selle