有許多矩陣庫,在那裏爲Clojure的:各種clojure矩陣庫之間存在哪些性能折衷?
這些是什麼庫之間的性能權衡? 我聽說在一些底層實現中,(例如)矩陣實例化和操作性能之間存在權衡,但我一直未能找到詳細說明這些考慮的綜合資源。
感謝
有許多矩陣庫,在那裏爲Clojure的:各種clojure矩陣庫之間存在哪些性能折衷?
這些是什麼庫之間的性能權衡? 我聽說在一些底層實現中,(例如)矩陣實例化和操作性能之間存在權衡,但我一直未能找到詳細說明這些考慮的綜合資源。
感謝
如果你想利用core.matrix
,只有兩個目前的實現是相當成熟和高性能:
Clatrix
- 使用到本地BLASvectorz-clj
- 靈活快速的pure-JVM實施這真的歸結於您的用例。如果您主要關心大型線性代數運算並且不介意本地依賴關係,那麼Clatrix
目前是您最好的選擇 - 這僅僅是因爲BLAS實現如此之快。這是特別有用的:
如果你想要做的一般陣列編程工作,然後vectorz-clj
具有作爲優勢純粹的JVM代碼,並且在陣列/矩陣格式方面更加靈活。的東西,實例vectorz-CLJ支持孔,你不能在Clatrix做:
總體而言,vectorz-clj
不會那麼快的東西像大矩陣含多處但是對於許多其他操作和中小型矢量工作而言可能比Clatrix
更快。除非我認爲線性代數性能將是主要瓶頸,否則通常我會選擇vectorz-clj
。
其他core.matrix
實現不太成熟,但對特定用例仍可能有用。 core.matrix
的一個很好的特性是能夠在使用相同的通用API的情況下混合和匹配實現,所以它不是一個「全部或全部」的選擇。
聲明:我已經創建或貢獻了很多上述項目。我希望我已經給出了一個相當公正客觀的評價。
如果您不需要支持core.matrix
,那麼您有更多的選擇 - 您可以通過Clojure的Java interop使用任何Java矩陣庫。從理論上講,這些也可能成爲core.matrix
的實現 - 唯一的限制是有人需要完成這項工作來擴展core.matrix協議以支持新的矩陣類型。
謝謝!我絕對傾向於堅持使用core.matrix來完成您提到的「混搭」功能。 此外,感謝您在這些方面的所有努力! – metasoarous