Elegante Implementierung der n-dimensionalen Matrixmultiplikation mit Listen?

8

Mit Hilfe von Listenfunktionen lassen sich beliebig dimensionierte Vektormathematik recht elegant implementieren. Zum Beispiel:

%Vor%

Und so weiter.

%Vor%

Natürlich ist dies nicht die effizienteste Lösung, aber es ist aufschlussreich zu betrachten, wie man sagen kann map , zipWith und solche Vektoroperationen verallgemeinern. Es gibt eine Funktion, die ich allerdings nicht elegant umsetzen konnte - das sind Cross-Produkte. Da eine mögliche n-dimensionale Verallgemeinerung von Kreuzprodukten die nd-Matrix-Determinante ist, wie kann ich die Matrix-Multiplikation elegant implementieren?

Edit: Ja, ich habe eine völlig unzusammenhängende Frage zu dem Problem gestellt, das ich gestellt habe. Fml.

    
MaiaVictor 02.07.2015, 22:17
quelle

1 Antwort

4

Es passiert einfach, dass ich einen Code habe, der herumliegt, um n-dimensionale Matrixoperationen auszuführen, was ich ziemlich süß fand, als ich es zumindest schrieb:

%Vor%

Das süße Bit hier ist matrixMult , was eine der wenigen Operationen ist, die auf zweidimensionale Arrays spezialisiert ist. Es erweitert sein erstes Argument entlang einer Dimension (indem eine Kopie des zweidimensionalen Objekts in jede Scheibe des dreidimensionalen Objekts eingefügt wird); expandiert seine Sekunde entlang einer anderen; führt eine punktweise Multiplikation durch (jetzt in einem dreidimensionalen Array); dann bricht die fabrizierte dritte Dimension durch Summieren zusammen. Ganz nett.

    
Daniel Wagner 02.07.2015, 22:46
quelle