Матричные библиотеки Java
Мне было интересно, предоставляют ли какие-либо из известных матричных библиотек для Java, такие как Colt или EJML, функциональность, аналогичную MatLab? Например, я не могу найти нигде в определении их простого API-метода сложение или вычитание двух матриц / векторов друг с другом, что, кажется, является наиболее распространенной используемой операцией. Я что-то пропустил?
5 ответов
Попробуйте библиотеку Apache Commons Math. Пакет org.apache.commons.math3.linear содержит нужные вам функции. Главная страница
Некоторые библиотеки Java для линейной алгебры:
- Apache Commons Math: 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/ имеет многообещающие ориентиры
- Эффективная матричная библиотека Java (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.
Примечание: лично: я использую Apache Commons Math и Colt в своем собственном проекте ( http://www.finmath.net/). Хотя математика общего достояния активно развивается, я обнаружил, что Colt все еще быстрее в некоторых задачах (например, разложение по собственным значениям). По этой причине я использую какую-то оболочку, которая позволяет мне быстро переключать основную библиотеку (мне нужны только несколько вещей, таких как решение систем уравнений и разложение по собственным значениям).
Существует также библиотека la4j, которая поддерживает функции функционального программирования в качестве функторов. Вы можете использовать метод transform() с ручной функцией hi-order.
Интерфейс для COLT дает вам общий OP: assign(matrix, function)
, который вы можете использовать для сложения или вычитания матриц и векторов.
В качестве Javadocs для assign()
говорит:
Назначает результат функции каждой ячейке;
x[row,col] =function(x[row,col],y[row,col])
,
Таким образом, используя функцию сложения как function
Вы можете добавить матрицы.
Вы можете использовать это. Он очень прост и обеспечивает базовые матричные операции.
Вы можете добавить / вычесть / умножить и т. Д. 2d матрицы и векторы.
Вы можете попробовать мою новую библиотеку Java (совместимую с Java 6+), которую можно использовать для всех видов приложений, особенно для выполнения многопоточных матричных вычислений (расширение JAMA с помощью многопоточности; в настоящее время на 30% быстрее, чем доступные библиотеки с открытым исходным кодом). Вы можете проверить это на GitHub:
https://github.com/b-io/io.barras/tree/master/java/jupiter
Обратите внимание, что каждый проект независим друг от друга и находится под очень разрешающей лицензией MIT.