我正在寻找 JVM 上的数值计算工具。我的主要要求是表现力/可读性、易用性、评估和数学函数方面的特性。我想我在 JVM 上追求类似 Matlab 内核(可能包括一些基本库和无图形)之类的东西。我希望能够在正在运行的 JVM 上“抛出”计算代码,并希望对这些代码进行评估。我不想担心类型。任意精度和性能并不那么重要。
我想那里有一些不错的库,但我认为需要一种适当的语言来获得表现力。
你们建议使用哪种工具来解决 JVM 上富有表现力、功能丰富的数字计算?
从jGroovyLab页面:
GroovyLab 环境旨在提供一个类似于 Matlab/Scilab 的科学计算平台,该平台由以 Groovy 语言实现的脚本引擎支持。GroovyLab 用户可以使用 Matlab-lke 命令控制台,也可以使用基于 jsyntaxpane ( http://code.google.com/p/jsyntaxpane/ ) 组件的灵活编辑器,这提供了更方便的代码开发。此外,GroovyLab 支持基于 symja ( http://code.google.com/p/symja/ ) 项目的计算机代数。
还有GroovyLab:
GroovyLab 是 Groovy 类的集合,可提供类似 matlab 的语法和基本功能(线性代数、2D/3D 图)。它基于 jmathplot 和 jmatharray 库:
Groovy 为 Java 程序员提供了平滑的学习曲线和类似于 Ruby 的灵活语法。在其上编写 DSL 也很容易。
虽然 Groovy 的性能对于动态语言来说相当不错,但如果您需要静态编译,您可以使用它。
根据您想要从事的工作量以及您已经熟悉的语言, Clojure 世界中的Incanter可能值得一看。现在在 Clojure 中快速发展的还有core.matrix,它旨在将高级通用抽象封装在使用各种方法或包实现的线性代数中。
您在帖子中强调了表现力,Clojure 的好处在于,作为 Lisp,可以制作或扩展 DSL 以紧密匹配问题域。这是该语言(以及一般的 Lisps)的一大吸引力。
我是Clojure的core.matrix的原作者。所以我在这个特定领域有明确的亲和力和更多的知识。也就是说,我仍然会尝试给你一个诚实的答案:-)
大约一年前,我和你的职位相同,正在寻找一种可扩展、灵活且适合部署为集群云服务的数值计算解决方案。
我最终选择了 Clojure,原因如下:
当时 Clojure 主要缺乏的是一个用于矩阵运算的优秀库/API。Incanter中有一些不错的工具,但它们不是很通用或性能不佳。因此,我开始开发 core.matrix,它正在形成一个惯用的 Clojure 风格的 NumPY / SciPY 等价物。现在它仍在进行中,但如果你小心的话,它足以用于生产。
在低级矩阵支持方面,我还维护了 vectorz-clj,这是我尝试提供一个 core.mattrix 实现,它提供高性能向量/矩阵操作,同时保持纯 Java(即没有本机依赖项)。如果你对这个的表现感兴趣,不妨看看:
Clojure 之后我的第二个选择是 Scala。我喜欢 Scala 稍微成熟的和不错的静态类型系统。这两种语言都是基于 JVM 的,所以库/工具方面是平局。可能是 Lisp 的特性决定了它。
如果您碰巧可以访问 Mathematica,那么通过 J/Link 很容易让它与 JVM 一起工作。对于 Clojure 来说,Clojuratica是一个出色的库,可以让它尽可能地看起来简洁,尽管它已经有一段时间没有维护了,并且可能需要一些努力才能让它再次在现代环境中工作。