4

JVM での数値計算ツールを探しています。私の主な要件は、表現力/読みやすさ、使いやすさ、評価、および数学関数の機能です。私は、JVM上のMatlabカーネル(おそらくいくつかの基本的なライブラリとグラフィックなしを含む)のようなものを求めていると思います。実行中の JVM で計算コードを「スロー」して、このコードを評価できるようにしたいと考えています。型にはこだわりたくない。任意の精度とパフォーマンスはそれほど重要ではありません。

そこにはいくつかの素晴らしいライブラリがあると思いますが、表現力を得るにはその上に適切な言語が必要だと思います.

JVM での表現力豊かな機能豊富な数値計算に対処するために、どのツールを提案しますか?

4

6 に答える 6

3

Mathworks Matlabのほとんどは、線形代数計算の無敵のチャンピオンであるIntel Math Kernel Library(MKL)に基づいて構築されています。Javaサポートはありますが、500ドルかかります(JavaサポートだけでなくMKL)...

Javaを使用する場合の2番目に最適なオプションは、線形代数の業界標準であるBLASとLAPACKを使用するjblasです。

純粋なJavaライブラリのパフォーマンスは明らかにひどいです。ここを参照してください...

于 2013-03-14T15:04:32.363 に答える
3

jGroovyLabページから:

GroovyLab 環境は、Groovy 言語で実装されたスクリプト エンジンによってサポートされる科学計算プラットフォームのような Matlab/Scilab を提供することを目的としています。GroovyLab ユーザーは、Matlab-lke コマンド コンソール、またはより便利なコード開発を提供する jsyntaxpane ( http://code.google.com/p/jsyntaxpane/ ) コンポーネントに基づく柔軟なエディターを使用して作業できます。また、GroovyLab は、symja ( http://code.google.com/p/symja/ ) プロジェクトに基づくコンピューター代数をサポートしています。

また、 GroovyLabもあります。

GroovyLab は、matlab に似た構文と基本機能 (線形代数、2D/3D プロット) を提供する Groovy クラスのコレクションです。これは、jmathplot および jmatharray ライブラリに基づいています。

Groovy は、Java プログラマーにとってスムーズな学習曲線と、Ruby に似た柔軟な構文を備えています。それに DSL を書くのもとても簡単です。

Groovy のパフォーマンスは動的言語としてはかなり優れていますが、必要な場合は静的コンパイルを使用できます。

于 2013-03-14T16:04:13.317 に答える
2

どれだけの作業に取り掛かりたいか、どの言語に精通しているかにもよりますが、Clojure の世界のIncanterは一見の価値があるかもしれません。また、現在 Clojure で急速に進化しているのがcore.matrix です。これは、さまざまなメソッドまたはパッケージで実装された線形代数で高レベルの共通抽象化をカプセル化することを目的としています。

あなたは投稿で表現力を強調しましたが、Clojure の優れた点は、Lisp として、DSL を作成または拡張して、問題のドメインに厳密に一致させることができることです。これは、この言語 (および Lisp 全般) の大きな魅力の 1 つです。

于 2013-03-14T15:45:29.060 に答える
2

Spireは、見ているエリアを狙っているように聞こえます。高級言語の表現力を犠牲にすることなく、適切なパフォーマンスを得るために、マクロなどの最近の多くの scala 機能を利用します。

機械学習を対象としていますが、かなりの量の線形代数が含まれています。

于 2013-03-14T15:40:37.257 に答える
2

私は Clojure 用のcore.matrixの最初の作成者です。ですから、私はこの特定の分野で明確な親和性とより多くの知識を持っています. そうは言っても、私はまだあなたに正直な答えをしようとします:-)

私は 1 年ほど前にあなたと同じ立場で、スケーラブルで柔軟性があり、クラスター化されたクラウド サービスとしての展開に適した数値計算のソリューションを探していました。

次の理由から、Clojure を使用することになりました。

  • 関数型プログラミング: Clojure は本質的に関数型プログラミング言語であり、他のほとんどの言語よりも優れています (ただし、Haskell ほどではありませんが....)。怠惰な無限シーケンス、永続的なデータ構造、全体にわたる不変性など。大規模な計算を扱う場合は、優雅なコードになります。
  • メタプログラミング: ベクトル/計算式のコード生成を行う必要があることがわかりました。したがって、Lisp であることは大きな利点でした。「言語全体」のマクロ システムを使用してホモイコニック言語でコード生成を行うと、それに近いものを見つけるのは困難です。
  • 並行性 - Clojure には、マルチコードの並行性に対する印象的で動きのあるアプローチがあります。まだ見ていない場合は、以下をご覧ください: http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey
  • Interactive REPL : 私が常に感じていたことは、データ作業にとって非常に重要です。コード/データを「ライブ」で操作して、そのプロパティを実際に感じられるようにしたいと考えています。インタラクティブな REPL を使用して動的に型付けされた言語を使用すると、ここで驚くほど機能します。
  • JVM ベース: 巨大なライブラリ/ツール エコシステムとランタイム プラットフォームとしての JVM の優れたエンジニアリングにより、実用的な目的に大きな利点があります。
  • コミュニティ: Clojure では、特にデータと分析の一般的な領域で多くの革新が行われているのを見てきました。

当時Clojureに欠けていた主なものは、行列演算用の優れたライブラリ/APIでした。Incanterには優れたツールがいくつかありましたが、それらは汎用性やパフォーマンスに優れたものではありませんでした。したがって、私は core.matrix の開発を開始しました。これは、NumPY / SciPY に相当する慣用的な Clojure フレーバーの形になりつつあります。現在はまだ作業中ですが、注意すれば本番環境での使用には十分です。

低レベルの行列サポートに関しては、vectorz-cljも維持しています。これは、Pure Java のまま (つまり、ネイティブ依存関係なし) でありながら、高パフォーマンスのベクトル/行列操作を提供する core.mattrix 実装を提供する試みです。このパフォーマンスに興味がある場合は、以下を参照してください。

Clojure の次に選んだのは Scala でした。私は、Scala のやや成熟度が高く、適切な静的型システムが気に入りました。どちらの言語も JVM ベースであるため、ライブラリ/ツール側は引き分けでした。それを決めたのは、おそらく Lisp の機能でした。

于 2013-03-15T09:27:50.580 に答える
0

Mathematica にアクセスできる場合は、J/Link を使用して JVM で動作させるのはかなり簡単です。Clojure の場合、Clojuratecaはそれを可能な限り目立たなくするための優れたライブラリですが、しばらくの間メンテナンスされておらず、最新の環境で再び動作させるには多少の努力が必要になる場合があります。

于 2013-03-14T16:38:46.070 に答える