Перейти к матричной библиотеке
Существуют ли библиотеки для матричного умножения в Go?
Я хочу писать и развертывать некоторые масштабируемые и молниеносные алгоритмы ML на некоторых серверных узлах, но я боюсь, что скорость и мощность, которые я получу с Go, будут перевешиваться зрелостью Matlab или даже numpy реализации на "медленных" языках, которые будут намного быстрее.
Я бы предпочел не заниматься C/С++, хотя они являются королем производительности.
Быстрое умножение матриц и другие операции просто необходимы для этой задачи, и если Go недостаточно зрелый, чтобы иметь один... ну, мне нужно будет решить, буду ли я его запускать, или просто используйте другой инструмент.
спасибо
Ответы
Ответ 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) и сложных матриц (умножение, умножение точек, транспонирование, инверсия и т.д.).