2009-05-08 3 views
23

Я ищу хорошую (хорошо протестированную, полнофункциональную и идеально с приятным интерфейсом) матричную библиотеку для .NET/C#. Мои основные требования здесь только в том, что он должен быть бесплатным (я не особо забочусь о том, является ли он открытым исходным кодом в этом случае) и предпочтительно поддерживает операции sparse matrix. Обязательными требованиями являются все основные операции (например, умножение, транспонирование, инверсия), а также поиск собственных значений & собственных векторов. Реализация численных, а не аналитических методов обнаружения собственных значений, в частности Lanczos algorithm для разреженных матриц, была бы весьма предпочтительной, так как матрицы, с которыми я собираюсь иметь дело, очень велики (длины 10 000 соответственно) как квадратный, а также достаточно разреженный. Говоря это, я мог бы просить немного о многом, поэтому любые предложения для достаточно полной библиотеки матриц были бы замечательными.Matrix Library for .NET

Теперь я знаю, что для таких задач у Python есть одна или две полезные библиотеки (а именно NumPy/SciPy), но, к сожалению, .NET, похоже, не хватает в этой области.

недолгих поисков оказался следующие библиотеки для .NET, которые я мог бы потенциально использоваться:

Однако, поскольку у меня не было опыта в использовании какой-либо из этих библиотек или других (и не достаточно времени для c я бы очень признателен, если бы кто-нибудь здесь мог обсудить свои рекомендации относительно различных библиотек, их плюсы и минусы, особенно в отношении пригодности для моих целей, и их общий опыт с ними.

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

ответ

8

Edit:

Это было не совсем там последний раз, когда я оценил его, но там было совсем немного активности, поэтому следует также рассмотреть (бесплатно и с открытым исходным кодом) Math.NET Numerics.

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

Если вам нужна более надежная поддержка, вам, к сожалению, действительно нужно попасть в коммерческие пакеты для .NET atm.

Есть два очень многофункциональных пакета, оба из которых поддерживают матрицы очень хорошо. Extreme Numerics отлично работает и имеет некоторые очень приятные функции. Я также слышал очень хорошие вещи о математических библиотеках IMSL Visual Numerics.

+1

Да, я начинаю подозревать, что ты прав. Коммерческие пакеты на самом деле не вариант, я боюсь, что я студент университета. Тем не менее, спасибо за рекомендации. – Noldorin

+0

@Noldorin: Я бы написал Джереми в крайних цифрах и спросил, может ли он предоставить вам лицензию на исследования, так как вы студент, и это не используется в коммерческих целях. Это небольшая компания, и владелец кажется довольно дружелюбным и отзывчивым. (Он отлично подходит для поддержки, предпродажи и т. Д.) Это не может повредить. ;) –

+0

@Noldorin: Я просто помню dnAnalytics и добавил его тоже. Это, наверное, лучший некоммерческий вариант. –

0

В настоящее время существующая управляемая библиотека DirectX имеет некоторую поддержку матрицы.

Это с тех пор было завернуто в Microsoft XNA, что, вероятно, не подходит для вас, но MDX Wikipedia article рекомендует что-то под названием SlimDX, которое might be okay.

+0

К сожалению, для меня это не варианты, учитывая, что они поддерживают только матрицы размером 4x4! Боюсь, мне нужно что-то, что может обрабатывать матрицы с 1000 строк/столбцов и в идеале эффективно обрабатывать разреженные (когда дело доходит до умножения). – Noldorin

2

У меня есть мы в прошлом Mapack и нашел, что это очень хорошо.

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

+0

Да, похоже, что нет поддержки разреженных матриц. Тем не менее, спасибо за рекомендацию. – Noldorin

1

Я использовал Mapack (порт .Net, а не версию COM) в проекте нейронной сети в университете. Я не могу точно запомнить мелкие детали библиотеки, но я сделал все, что мне было нужно, и не был особенно обременительным в использовании.

+0

Консенсус кажется (по крайней мере, судя по двум ответам и бит, который я читал в другом месте), что Mapack - это путь до бесплатных libs, хотя он не идеален. Я также использую матричные функции для университетского проекта, хотя он основан на физике, так что, пока я получаю результаты, как-то это не имеет большого значения в отношении метода. В любом случае, спасибо. – Noldorin

2

Другая альтернатива: IMSL for .NET. CenterSpace имеет библиотеки NMath - не использовал их.

+0

Они оба коммерческие, кажется. Это позор, потому что они кажутся довольно хорошими библиотеками ... – Noldorin

+0

@Noldorin: Я довольно тщательно проверил в пространстве .NET некоторое время назад. Все хорошие, надежные матричные библиотеки довольно коммерчески (по крайней мере, с начала 2008 года). –

+0

@ Reed: Да, это меня совсем не удивит ... Я все равно за слово. Мне интересно, если использование библиотеки Mapack и реализация алгоритма Lanczos над ним могут сделать работу. – Noldorin

1

Meta.Numerics (размещено на codeplex) является бесплатным пакетом, который будет вычислять собственные значения и собственные векторы несимметричных матриц, но в настоящее время он не рассматривает особенно редкие матрицы.

+0

Спасибо за предложение. Я, вероятно, по-прежнему буду работать с dnAnalytics, так как он отлично справляется с разреженными матрицами, но это выглядит как полезная библиотека общего назначения, о которой нужно помнить. – Noldorin

0

Что касается .NET и Python, вы можете использовать IronPython. Однако вам также понадобится Ironclad, чтобы заставить SciPy и NumPy работать с IronPython.

3

Попробуйте ILNumerics: У нас есть отн. долгое время как проект с открытым исходным кодом и недавно был изменен на коммерческие лицензии для лучшей и надежной поддержки. Я пристрастен, но тут приходит короткий список особенность:

  • Улучшенное управление памятью, поэтому ...
  • Гораздо более быстрые алгоритмы
  • Использует MKL для линейной алгебры
  • н-тусклые классы массивов, синтаксис похож в Matlab
  • 3D участок управления
  • Поддержка для 32/64 бит
  • Поддержка моно
  • Full feature list