Ich beginne gerade mit Haskell, ich habe den Abschnitt zum Definieren von Datentypen von LYAH gelesen und versuche den Sum-Product-Algorithmus für die Belief Propagation zu implementieren. Eine der rudimentären Aufgaben besteht darin, das probabilistische grafische Modell zu definieren.Haskell-Datentyp für Hmatrix Vektor und Matrix
Wie unten gezeigt, habe ich versucht, einen Graphen zu erstellen, indem ich den Knoten verknotete, um den Graphen darzustellen, wo jeder Knoten eine Gaußsche Verteilung darstellt und (vorläufig) konstante Gewichtsverknüpfungen zu seinen Nachbarn hat. Beim Versuch, die Mittelwerte und Kovarianztypen zu definieren, habe ich jedoch Schwierigkeiten, die Typen der Matrix- und Vektortypen anzugeben, d. H. Float oder Double.
module Graph(Graph) where
import Numeric.LinearAlgebra
data Mean = Mean Vector
data Covariance = Covariance Matrix
data Gaussian = Gaussian Mean Covariance
data Node = Node [Node] Gaussian
data Graph = Graph [Node]
In diesem einfachen Beispiel, was ist die Syntax Doppel Mittelwert als Vektor vom Typ Double und Kovarianz als Matrix des Typs zu definieren. Außerdem, wie würde man verallgemeinern, so dass Mean
und Covariance
vom Typ Float oder Double sein können?
ich derzeit folgende von GHCi
Graph.hs:5:18: error:
• Expecting one more argument to ‘Vector’
Expected a type, but ‘Vector’ has kind ‘* -> *’
• In the type ‘Vector’
In the definition of data constructor ‘Mean’
In the data declaration for ‘Mean’
Failed, modules loaded: none.
ich das hmatrix Paket verwende als here beschrieben
Was für eine fantastische Antwort; Danke! Das hat ein paar Dinge für mich geklärt. Ich hatte einige Zweifel an der Knotenbindung und schuf unbeabsichtigt eine unendliche Struktur.Der andere Weg (Adjazenzmatrizen usw.) schien einfach unelegant zu sein. –