gpt4 book ai didi

performance - 各种 clojure 矩阵库之间存在哪些性能权衡?

转载 作者:行者123 更新时间:2023-12-04 18:42:53 24 4
gpt4 key购买 nike

clojure 有许多矩阵库:

  • vectorz-clj
  • clatrix
  • parallel colt

  • 这些库之间的性能权衡是什么?
    我听说在一些底层实现中,(例如)矩阵实例化和操作性能之间存在权衡,但我无法找到详细说明这些考虑因素的综合资源。

    谢谢

    最佳答案

    如果你想使用 core.matrix ,目前只有两种实现相当成熟和高性能:

  • Clatrix - 使用对 的调用原生 BLAS
  • vectorz-clj - 灵活快速的纯JVM 实现

  • 这真的取决于您的用例。如果您主要关心大型线性代数运算并且不介意 native 依赖关系,那么 Clatrix是您目前最好的选择 - 仅仅是因为 BLAS 的实现速度如此之快。这对于以下情况特别有用:
  • 大矩阵乘法
  • 线性代数(矩阵分解等)

  • 如果你想做一般的数组编程工作,那么 vectorz-clj具有纯 JVM 代码的优点,并且在数组/矩阵格式方面更加灵活。 vectorz-clj 很好地支持你在 Clatrix 中不能做的事情的例子:
  • N 维数组
  • 各种特殊类型的稀疏数组(对角矩阵、不同的稀疏存储格式等)
  • 具有任意跨步访问的数组(如 Numpy)
  • 将轻量级“ View ”转换为更大的数组

  • 总体而言, vectorz-clj对于像大矩阵乘法这样的事情不会那么快,但可能比 Clatrix 快对于许多其他操作和中小型矢量工作。我通常会选择 vectorz-clj除非我认为线性代数性能将是主要瓶颈。

    其他 core.matrix实现不太成熟,但对于特定用例可能仍然有用。 core.matrix 的一个不错的功能是在使用相同的通用 API 时混合和匹配实现的能力,因此它不是“全有或全无”的选择。

    免责声明:我已经创建或参与了上述许多项目。我希望我已经给出了一个相当公正和客观的评价。

    如果您不需要 core.matrix支持,那么您有更多选择 - 您可以通过 Clojure 的 Java 互操作使用任何 Java 矩阵库。理论上,这些可能会变成 core.matrix实现也是如此——唯一的限制是有人需要做一些工作来扩展 core.matrix 协议(protocol)以支持新的矩阵类型。

    关于performance - 各种 clojure 矩阵库之间存在哪些性能权衡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21225223/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com