有许多矩阵库用于clojure:
这些图书馆之间的性能平衡是什么? 我听说有一些底层实现,在(例如)矩阵实例化和操作性能之间存在权衡,但我无法找到详细说明这些注意事项的综合资源。
由于
答案 0 :(得分:6)
如果你想使用core.matrix
,目前只有两种实现相当成熟和高效的实现:
Clatrix
- 使用对原生BLAS vectorz-clj
- 灵活而快速的纯JVM 实施这真的取决于你的用例。如果你最关心大线性代数运算并且不介意原生依赖,那么Clatrix
是你目前最好的选择 - 仅仅因为BLAS实现如此之快。这对于:
如果你想做一般的数组编程工作,那么vectorz-clj
具有纯JVM代码的优势,并且在数组/矩阵格式方面更加灵活。 vectorz-clj很好地支持你在Clatrix中无法做到的事情的例子:
总的来说,vectorz-clj
对于大矩阵乘法这样的事情来说不会那么快,但对于许多其他操作和中小型矢量工作来说,Clatrix
可能比vectorz-clj
快。我通常会选择core.matrix
,除非我认为线性代数性能会成为主要瓶颈。
其他core.matrix
实现不太成熟,但可能仍然对特定用例有用。 core.matrix
的一个很好的功能是能够在使用相同的通用API时混合和匹配实现,因此它不是“全有或全无”的选择。
免责声明:我已经创建或参与了上述许多项目。我希望我给出了一个相当公正和客观的评价。
如果您不需要core.matrix
支持,那么您还有更多选择 - 您可以通过Clojure的Java互操作使用任何Java矩阵库。理论上,这些也可能成为{{1}}实现 - 唯一的限制是有人需要做扩展core.matrix协议的工作以支持新的矩阵类型。