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

Библиотеки разреженных матриц для Ruby

Я ищу библиотеку Sparse Matrix, которую я могу использовать из Ruby. В настоящее время я использую привязки к научной библиотеке GNU, предоставленные "gsl", но мое приложение было бы лучше оптимизировано, если бы я использовал выделенный разреженный матричная библиотека. Я исследовал linalg и NArray библиотеки. Ни одна из этих трех библиотек не поддерживает оптимизированное хранилище или операции с разреженной матрицей.

Есть ли что-нибудь, что я пропустил, или существующую библиотеку C, для которой возможно писать привязки? Я бы предпочел, чтобы первое было последним, поскольку раньше я не писал привязки C в Ruby, но я был бы готов его попробовать.

4b9b3361

Ответ 1

Как и Билл, упомянутый выше, чистая рубиновая интерпретация будет медленнее, чем вы хотите, но может быть хорошей для прототипирования. Я работал над такой библиотекой на https://github.com/hmcfletch/sparse-matrix

Я еще не выпустил его как драгоценный камень, и на нем еще предстоит сделать больше, но посмотрите, если у вас есть необходимость.

Ответ 2

Чистые рубиновые решения будут смехотворно медленными. У меня возникло бы желание собрать что-то вроде MTJ (http://code.google.com/p/matrix-toolkits-java/) и использовать его под JRuby.

Там есть куча java-кода; большая часть из них довольно зрелая, хотя я не знаю достаточно места, чтобы рекомендовать конкретную библиотеку. Я могу сказать вам, что я часто использовал java от jruby, и мне очень приятно работать.

Ответ 3

Вы видели SciRuby?

В настоящее время мы не имеем разреженной матрицы, но мы над этим работаем. Мы также находимся в процессе переписывания NArray с благословением Масахиро Танаки.

Одна цель состоит в том, чтобы все работает в чистом Ruby, на C (через привязки GSL, как правило), и в Java для JRuby. (Pure Ruby будет тогда резервным, если GSL и т.д. Были недоступны.)

Боковое замечание: Это ужасный ответ на этот вопрос. Я размещаю его здесь в основном так, чтобы любой, кто, оказывается, работает над такими вещами, знает, где нас найти. =)