2014-01-20 20 views

回答

6

如果你想利用core.matrix,只有兩個目前的實現是相當成熟和高性能:

  • Clatrix - 使用到本地BLAS
  • 電話vectorz-clj - 靈活快速的pure-JVM實施

這真的歸結於您的用例。如果您主要關心大型線性代數運算並且不介意本地依賴關係,那麼Clatrix目前是您最好的選擇 - 這僅僅是因爲BLAS實現如此之快。這是特別有用的:

  • 大型矩陣乘法
  • 線性代數(矩陣分解等)

如果你想要做的一般陣列編程工作,然後vectorz-clj具有作爲優勢純粹的JVM代碼,並且在陣列/矩陣格式方面更加靈活。的東西,實例vectorz-CLJ支持孔,你不能在Clatrix做:

  • N維陣列
  • 各種專門類型的稀疏數組的(對角矩陣,不同稀疏存儲格式等)
  • 陣列任意跨距接入(如NumPy的)
  • 輕量級「意見」到更大的陣列

總體而言,vectorz-clj不會那麼快的東西像大矩陣含多處但是對於許多其他操作和中小型矢量工作而言可能比Clatrix更快。除非我認爲線性代數性能將是主要瓶頸,否則通常我會選擇vectorz-clj

其他core.matrix實現不太成熟,但對特定用例仍可能有用。 core.matrix的一個很好的特性是能夠在使用相同的通用API的情況下混合和匹配實現,所以它不是一個「全部或全部」的選擇。

聲明:我已經創建或貢獻了很多上述項目。我希望我已經給出了一個相當公正客觀的評價。

如果您不需要支持core.matrix,那麼您有更多的選擇 - 您可以通過Clojure的Java interop使用任何Java矩陣庫。從理論上講,這些也可能成爲core.matrix的實現 - 唯一的限制是有人需要完成這項工作來擴展core.matrix協議以支持新的矩陣類型。

+0

謝謝!我絕對傾向於堅持使用core.matrix來完成您提到的「混搭」功能。 此外,感謝您在這些方面的所有努力! – metasoarous

相關問題