Мне было интересно, действительно ли какие-либо из известных матричных библиотек для Java, таких как Colt или EJML, аналогичны функциям MatLab? Например, я не могу найти нигде в определении своего простого API-интерфейса для добавления или вычитания двух матриц/векторов друг другом, что, по-видимому, является наиболее распространенной операцией. Я что-то пропустил?
Библиотеки Java-матриц
Ответ 1
Попробуйте библиотеку Apache Commons Math. В пакете org.apache.commons.math3.linear содержатся функции, которые вы хотите. Домашняя страница
Ответ 2
Некоторые библиотеки 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 все еще быстрее в некоторых задачах (например, разложение по собственным значениям). По этой причине я использую какую-то оболочку, которая позволяет мне быстро переключать основную библиотеку (мне нужны только некоторые вещи, такие как решение систем уравнений и разложение по собственным значениям).
Ответ 3
Интерфейс для COLT дает вам общий OP: assign(matrix, function)
, который вы можете использовать для добавления или вычитания матриц и векторов.
Поскольку javadocs для assign()
говорит:
Назначает результат функции каждой ячейке;
x[row,col] =function(x[row,col],y[row,col])
.
Итак, используя функцию добавления как function
- вы можете добавить матрицы.
Ответ 4
Существует также la4j библиотека, которая поддерживает функции функционального программирования как функторы. Вы можете использовать метод transform() с ручной функцией hi-order.
Ответ 5
Вы можете использовать это. Это очень просто и обеспечивает основные матричные операции.
Вы можете добавить/вычесть/умножить и т.д. 2d матрицы и векторы.