Подтвердить что ты не робот

Перейти к матричной библиотеке

Существуют ли библиотеки для матричного умножения в Go?

Я хочу писать и развертывать некоторые масштабируемые и молниеносные алгоритмы ML на некоторых серверных узлах, но я боюсь, что скорость и мощность, которые я получу с Go, будут перевешиваться зрелостью Matlab или даже numpy реализации на "медленных" языках, которые будут намного быстрее.

Я бы предпочел не заниматься C/С++, хотя они являются королем производительности.

Быстрое умножение матриц и другие операции просто необходимы для этой задачи, и если Go недостаточно зрелый, чтобы иметь один... ну, мне нужно будет решить, буду ли я его запускать, или просто используйте другой инструмент.

спасибо

4b9b3361

Ответ 1

Если вы хотите иметь собственное решение, вы можете использовать skelterjohn/go.matrix. Насколько мне известно, это самая продвинутая реализация матрицы в чистом виде.

Он включает, помимо прочего, параллельное умножение матрицы, как обсуждалось здесь.

Имейте в виду, что с помощью cgo можно связать библиотеки C/С++. Поэтому, если у вас есть библиотека, но вы не хотите писать C/С++, вы можете написать некоторую оболочку для тех методов, которые вам нужны, и написать остальную часть в go. Это было сделано, например, для BLAS/LAPACK.

Обновление. Как отметил @Malcom, разработка упомянутой обертки cgo кажется застопорились. Посмотрите biogo.

Ответ 2

Там очень хороший пакет матриц, который помимо биолога. Я посмотрел на gomat на go.matrix, и по состоянию на октябрь 2013 года я пришел к выводу, что biogo более зрелый. Багажная матрица Biogo поддерживается BLAS. Biogo использует cgo для связи с C-кодом, который связывается с библиотеками FORTRAN BLAS. Я думаю, что поддерживается только Linux.

gomat является неполным, и деятельность в области развития застопорилась. Последнее редактирование в Гомате прошло более года назад. Кроме того, gomat нигде не является таким полным, как go.matrix или biogo.matrix.

go.matrix - хороший пакет. Это зрелая, чистая реализация библиотеки матриц. Он даже поддерживает параллельные матричные операции. Однако biogo.matrix обладает дополнительным преимуществом использования BLAS. BLAS был испытан на протяжении десятилетий; Я бы доверял ему надежность и производительность (несмотря на то, что не тестировал две реализации).

Здесь документация по биогу:

http://godoc.org/code.google.com/p/biogo

В частности, соответствующие пакеты матриц:

http://godoc.org/code.google.com/p/biogo.matrix

http://godoc.org/code.google.com/p/biogo.blas

Установить с помощью:

go get code.google.com/p/biogo/

Ответ 3

Я знаю, что этот вопрос довольно старый, но я собираюсь оставить ответ на тот случай, если кто-то попадет сюда после поиска в Google для быстрого внедрения матрицы.

После некоторого времени поиска и тестирования я решил использовать пакет mat от gonum, в основном из-за его интеграции с другими числовыми пакетами от gonum, которые будут полезны для безопасной среды многопартийных вычислений, над которой я работаю.

Он содержит большинство операций, необходимых для вещественных (float64) и сложных матриц (умножение, умножение точек, транспонирование, инверсия и т.д.).