2009-12-10 3 views
5

Я заметил, что Matlab действительно выполняет некоторую функцию матрицы, например, добавление 5 ко всем элементам массива n * n происходит почти мгновенно, даже если матрица велика, потому что вам не нужно перебирать петлю каждый элемент, делая то же самое в java, цикл for берет навсегда, если матрица велика.Матричные функции matlab в java

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

+0

Вы не можете сравнить циклы matlab с java-контуром, java намного быстрее. Без сомнения, цикл java все еще медленнее, чем специальная математическая библиотека, написанная на C. Но уверены ли вы, что ваша самая большая неэффективность находится в матричных операциях? Из моего опыта для тех же приложений, перенесенных в java из matlab, с матрицами среднего размера и без инверсии матрицы, совокупная производительность аналогична.Конечно, мы теряем производительность при умножении/добавлении матрицы, но мы получаем производительность во всем остальном, например, при отправке методов и gui. – Mikhail

+0

Вот список функций Matlab и их эквивалент в EJML http://code.google.com/p/efficient-java-matrix-library/wiki/MatlabFunctions. Большинство из них - очень прямые конверсии. –

ответ

7

Colt может быть самым быстрым.

«Colt предоставляет набор библиотек с открытым исходным кодом для высокопроизводительных научных и технических вычислений на Java». «Например, проект Ninja от IBM Watson показал, что Java действительно может выполнять вычисления матрицы BLAS до 90% с оптимизацией Fortran «.

JAMA!

«JAMA - базовый пакет линейной алгебры для Java. Он предоставляет классы пользовательского уровня для построения и управления реальными плотными матрицами».

Или Efficient Java Matrix Librar у

«Эффективное Java Матрица библиотека (EJML) является линейной библиотекой алгебры для манипулирования плотных матриц Ее целями дизайна являются;. 1), чтобы быть вычислительно эффективными, насколько это возможно для малых и больших матриц , и 2) быть доступным как для новичков, так и для экспертов ».

+0

спасибо. знаете ли вы, как они достигают эффективности? Я имею в виду, что происходит в коде, потому что, если бы я писал что-то вроде matlab или JAMA, я не мог придумать способ обновить всю матрицу, кроме запуска супер медленных циклов. – anon

+0

На странице Colt они отмечают, что это комбинация выбора алгоритма и структуры данных. Они предоставляют исходный код в их распределении. Вы можете проверить это и посмотреть. –

+0

Im только спекулирует, но они должны каким-то образом использовать упакованные инструкции (также называемые SIMD) для достижения некоторого параллелизма. например: http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions#Example – Amro

9

Просто наткнулся на эту публикацию и подумал, что я брошу свои два цента. Я автор EJML, и я также работаю над показателями производительности и стабильности для java-библиотек. В то время как несколько вопросов определяют, насколько быстро алгоритм, Михаил прав, что кеширование является очень важной проблемой при выполнении больших матриц. Для более мелких матриц накладные расходы библиотек становятся более важными.

Из-за накладных расходов в доступе к массиву чистые библиотеки Java работают медленнее, чем высоко оптимизированные библиотеки c, даже если алгоритмы являются точно такими же. Некоторые библиотеки обойти эту проблему, совершив вызовы на собственный код. Вы можете проверить

http://code.google.com/p/matrix-toolkits-java/

, который делает именно это. При копировании памяти из java в исходную библиотеку возникнут некоторые накладные расходы, но для больших матриц это несущественно.

Для ориентира по чистой производительности Java (тот, который я работаю) проверить:

http://code.google.com/p/java-matrix-benchmark/

Другой ориентир здесь:

http://www.ujmp.org/java-matrix/benchmark/

Любой из них тесты должны дать вам представление о производительности для больших матриц.

+0

Я исправил ссылки для вас, и теперь, когда у вас больше 10 участников, вам больше не придется сталкиваться с проблемами, отправляя более 1 ссылку в своих ответах. знак равно – gnovice

Смежные вопросы