Colt や EJML など、よく知られた Java 用のマトリックス ライブラリのいずれかが、実際に MatLab と同様の機能を提供するかどうか疑問に思っていました。たとえば、2 つの行列/ベクトルを相互に加算または減算する API の単純なメソッドの定義のどこにも見つからないようです。これは、使用される最も一般的な操作のようです。何か不足していますか?
6 に答える
線形代数用の Java ライブラリには次のものがあります。
- Apache Commons 数学: http://commons.apache.org/proper/commons-math/
- jeigen - eigen のラッパー - https://github.com/hughperkins/jeigen (行列指数や行列対数などの複雑でめったに見られない機能を含む)
- jblas http://mikiobraun.github.io/jblas/ (行列指数などのより複雑な機能も備えており、これも非常に高速です)。
- コルトhttp://acs.lbl.gov/software/colt/
- JAMA http://math.nist.gov/javanumerics/jama/
- UJMP - http://sourceforge.net/projects/ujmp/
編集たぶん、このリストに出くわしたときはいつでも拡張できます-世界は動き続けています:
- ojAlgo - http://ojalgo.org/には有望なベンチマークがあります
- Efficient Java Matrix Library (EJML) - http://ejml.org
- ParallelColt - https://sites.google.com/site/piotrwendykier/software/parallelcolt
- la4j - http://la4j.org/
- MTJ - https://github.com/fommil/matrix-toolkits-java
- nd4j - https://nd4j.org/では、cuda や openBlas などの基本的なネイティブ実装を選択できます
注:個人的には、自分のプロジェクト ( http://www.finmath.net ) で Apache Commons Math と Colt を使用しています。コモンズ数学は活発に開発されていますが、Colt はいくつかのタスク (固有値分解など) でまだ高速であることがわかりました。そのため、基礎となるライブラリをすばやく切り替えることができるある種のラッパーを使用します (連立方程式の解法や固有値分解などのいくつかのことだけが必要です)。
Apache Commons Math ライブラリを試してください。org.apache.commons.math3.linear パッケージには、必要な関数が含まれています。ホームページ
関数型プログラミング機能をファンクターとしてサポートするla4jライブラリーもあります。手動の高次関数で transform() メソッドを使用できます。
COLT のインターフェースは、assign(matrix, function)
行列とベクトルの加算または減算に使用できる汎用 OP: を提供します。
のjavadocsがassign()
言うように:
関数の結果を各セルに割り当てます。
x[row,col] =function(x[row,col],y[row,col])
.
したがって、加算関数を使用することでfunction
、行列を追加できます。
あなたはこれを使うことができます。これは非常に単純で、基本的な行列演算を提供します。
2 次元の行列とベクトルの加算/減算/乗算などを行うことができます。