Wenn Sie wollen von core.matrix
, gibt es nur zwei Implementierungen derzeit die vernünftigerweise reif sind und performant machen:
Clatrix
- Verwendungen, von denen Anrufe nativen BLAS
vectorz-clj
- eine flexible und schnelle pure-JVM implementation
Es kommt wirklich auf Ihre Anwendungsfälle an. Wenn Sie sich hauptsächlich für große lineare Algebra-Operationen interessieren und die nativen Abhängigkeiten nicht stören, dann ist Clatrix
derzeit Ihre beste Wahl - einfach weil BLAS-Implementierungen so schnell sind. Dies ist besonders nützlich für:
- Große Matrixmultiplikation
- Lineare Algebra (Matrizenzerlegung usw.)
Wenn Sie allgemeine Array-Programmierung Arbeit tun wollen, dann vectorz-clj
den Vorteil hat, zu sein reiner JVM-Code und viel flexibler in Bezug auf Array/Matrix-Formate. Beispiele für Dinge, die vectorz-CLJ unterstützt auch, dass Sie nicht in Clatrix tun können:
- N-dimensionale Arrays
- Verschiedene spezialisierte Arten von spärlichen Arrays (Diagonalmatrizen, verschiedene Sparse Speicherformate etc.)
- Arrays mit beliebigem Zugriff strided (wie Numpy)
- Leichtbau „Ansichten“ in größere Arrays
Insgesamt vectorz-clj
wird nicht so schnell sein für Dinge wie große Matrix multipl Icing, aber ist wahrscheinlich schneller als Clatrix
für viele andere Operationen und kleine/mittlere Vektorarbeit. Ich würde normalerweise vectorz-clj
wählen, es sei denn, ich dachte, dass die lineare Algebra-Leistung der größte Engpass wäre.
Die anderen core.matrix
Implementierungen sind weniger ausgereift, können aber immer noch für bestimmte Anwendungsfälle nützlich sein. Eine nette Eigenschaft von core.matrix
ist die Fähigkeit, Implementierungen zu mischen und anzupassen, während die gleiche allgemeine API verwendet wird, also ist es keine "Alles oder Nichts" -Auswahl.
Haftungsausschluss: Ich habe viele der oben genannten Projekte erstellt oder beigetragen. Ich hoffe, ich habe eine unvoreingenommene und objektive Bewertung abgegeben.
Wenn Sie keine core.matrix
Unterstützung benötigen, dann haben Sie viele weitere Optionen - Sie können jede der Java-Matrixbibliotheken über Clojures Java-Interop verwenden. In der Theorie könnten dies auch core.matrix
Implementierungen werden - die einzige Einschränkung ist, dass jemand die Arbeit machen muss, um die core.matrix-Protokolle zu erweitern, um die neuen Matrixtypen zu unterstützen.
Danke! Ich bin definitiv geneigt, bei core.matrix für genau die "mix and match" -Fähigkeit zu bleiben, die Sie erwähnen. Auch, vielen Dank für all Ihre harte Arbeit an diesen! – metasoarous