Unboxing, (Sparse) Matrizen und Haskell-Vektorbibliothek

8

Ich möchte Matrizen (voll oder dünn) effizient mit Haskells Vektorbibliothek manipulieren.

Hier ist ein Matrixtyp

%Vor%

Wie Sie sehen können, ist die Matrix ein Vektor von ungepackten Vektoren. Nun würde ich gerne ein Punktprodukt zwischen einem Vektor und einer Matrix machen. Es ist ziemlich einfach, indem man eine Summe, einen Reißverschluss und eine Karte kombiniert.

Aber wenn ich das tue, weil ich durch die Reihen der Matrix abbilde, ist das Ergebnis ein umrahmter Vektor, obwohl es entpackt werden könnte.

%Vor%

Wie kann ich einen ungepackten Vektor effizient erhalten?

    
jiyunatori 29.04.2010, 14:07
quelle

1 Antwort

1

Ich weiß nicht, was Ihr Field Typ ist, daher verstehe ich das zweite Snippet nicht ganz.

Wenn Sie jedoch Ihre Matrix als Vektor darstellen, werden Ihre Zwischenergebnisse als Vektoren angezeigt. Wenn Sie ein ungesichertes Ergebnis haben möchten, müssen Sie Typen explizit mit U.fromList . V.toList konvertieren. Dies ist ein Beispiel für Ihren dichten Matrixtyp (ich habe den spärlichen Fall aus Platzgründen weggelassen):

%Vor%

Ausgabe:

%Vor%

Ich bin mir nicht sicher über die Leistung dieses Ansatzes. Wahrscheinlich ist es viel besser, die gesamte Matrix als einen einzelnen ungepackten Vektor zu speichern und Elemente gemäß dem Speichermodell nach Index zu durchsuchen. Auf diese Weise benötigen Sie keine umrahmten Vektoren.

Sehen Sie sich auch die neue Bibliothek repa und ihre Operation index an.

    
sastanin 04.05.2010 17:49
quelle

Tags und Links