2017-06-10 4 views
1

Ich habe einen Code von Haar Tranform Matrix von Matlab zu Python erstellt es ist ein Erfolg bei der Eingabe der Wert von n für 2 und 4, aber wenn ich versuche, 8 gibt es einen FehlerHaar Transform Matrize von Matlab zu Python

"Traceback (letzter Aufruf zuletzt): Datei" Python ", Zeile 20, in ValueError: Form zu groß, um eine Matrix zu sein."

hier ist mein Code

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

Bitte Überlegen Sie, ob Sie Interpunktion in Ihrer Prosa verwenden –

Antwort

0

Ich nehme an, Sie von the wikipedia article oder einer ähnlichen Quelle der Definition der Haar-Transformation bekam, also werde ich versuchen, ihre Schreibweise zu bleiben.

Das Problem mit Ihrem Code ist, dass auf dem Wikipedia-Artikel ein leichter Missbrauch der Notation verwendet wird. In der Gleichung, die H_2N in Bezug auf H_N definiert, werden zwei Matrizen übereinander mit Klammern um sie herum gestapelt. Technisch wäre dies etwas wie ein Array, das aus zwei Arrays besteht, aber sie bedeuten, dass es ein einzelnes Array ist, bei dem die obere Hälfte der Werte gleich der einen Matrix und die untere Hälfte gleich der anderen Matrix ist.

In Ihrem Code, die Anordnung von zwei Matrizen ist der folgende Teil:

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

Sie diese in eine einzige Matrix oben mit der np.concatenate Funktion wie beschrieben machen kann wie folgt:

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

es hat funktioniert! @FlorianK! :) Vielen Dank! – r0selle