Умножение матриц в java

Я хотел сделать матричное умножение на Java, и скорость должна быть очень хорошей.

Я думал вызвать R через java, чтобы добиться этого.

Хотя у меня было несколько вопросов:

  1. Вызов R с использованием Java - хорошая идея? Если да, то есть ли образцы кода, которыми можно поделиться?

  2. Какие еще способы можно рассмотреть для умножения матриц в Java?

Обновлять:

Мой коллега, который уволился из фирмы, был программистом на C #, который был вынужден писать код Java, включающий матричное умножение.

- Он написал свой собственный класс DataTable на Java, чтобы иметь возможность

а) создавать индексы для сортировки и объединения с другими таблицами данных

б) матричное умножение.

Итак, я хочу существенно очистить код, и подумал, что использование чего-то вроде R в Java поможет мне сосредоточиться на бизнес-логике, а не на сортировке, объединении, умножении матриц и т. Д.


person Chapax    schedule 17.04.2010    source источник
comment
Загрузка больших объемов данных в JVM и из нее может потребовать значительных ресурсов. Сначала профилируйте, чтобы увидеть, достаточно ли быстрые результаты на чистой Java.   -  person Thorbjørn Ravn Andersen    schedule 17.04.2010
comment
Не изобретайте велосипед. Практически для любого математического вопроса в форме, которую я хочу выполнить X в Y, всегда есть оптимизированный пакет. Ищите Lapack java или blas java или даже java для матричного умножения.   -  person William Doane    schedule 17.04.2010


Ответы (5)


Вы можете использовать пакет матриц, такой как JAMA.

person Sebastian Paaske Tørholm    schedule 17.04.2010

Есть несколько вопросов о stackoverflow по использованию R с Java. Это просто с помощью JRI. См. Пример в этом вопросе: R изнутри Java. После того, как вы интегрировали свой код, умножение матриц в R становится тривиальным. Если у вас есть две матрицы, a и b, вы просто вызовете: a %*% b.

Если вы хотите использовать чистую Java и работать с математической библиотекой, вы также можете изучить использование Colt (адаптированный из JAMA), хотя вам может быть лучше просто напрямую с помощью JAMA.

Другой вариант - использовать Incanter от Clojure (который предоставляет оболочку вокруг Parallel Colt, среди прочего), а затем вызовите его как Jar из Java. Интегрировать Clojure в Java тривиально, и если все, что вам нужно, это умножение матриц, это будет проще для вас, чем использование R.

person Shane    schedule 17.04.2010

EJML кажется многообещающим новым для быстрого умножения. У них есть тесты на своем сайте, чтобы показать то, что они называют быстрым временем умножения матриц.

person demongolem    schedule 30.01.2012

Parallel colt - эффективная библиотека для выполнения матричных операций.

Другие хорошие библиотеки матриц могут включать jblas и ujmp

Все эти пакеты эффективны. jblas - мой личный фаворит. У него хорошая документация и прямолинейность, в отличие от ujmp.

person CTsiddharth    schedule 13.02.2012

Еще один голос за jblas. все методы такие, какими вы их ожидаете.

person Amir    schedule 30.09.2014