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

Матричная библиотека для .NET

Я ищу хорошую (хорошо протестированную, полнофункциональную и идеально подходящую интерфейсную) матричную библиотеку для .NET/С#. Мои основные требования здесь состоят только в том, что он должен быть бесплатным (я не особо забочусь о том, является ли он открытым исходным кодом в этом случае) и предпочтительно поддерживает разреженная матрица операций. Обязательными требованиями являются все основные операции (например, умножение, транспонирование, инверсия), а также поиск собственных значений и собственных векторов. Внедрение численных, а не аналитических методов обнаружения собственных значений, в частности алгоритма Ланцоса для разреженных матриц, было бы весьма предпочтительным, поскольку матрицы, с которыми я собираюсь иметь дело, очень большие (длины 10 000 вверх), а также квадратные, а также разумно разреженные. Говоря это, я мог бы просить о многом, поэтому любые предложения для достаточно полной библиотеки матриц были бы замечательными.

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

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

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

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

4b9b3361

Ответ 1

Edit:

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

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


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

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

Ответ 2

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

  • Лучшее управление памятью, следовательно...
  • Гораздо быстрее алгоритмы
  • Использует MKL для линейной алгебры
  • n-dim классы массивов, синтаксис, аналогичный Matlab
  • Элементы управления 3D-графиками
  • Поддержка 32/64 бит
  • Поддержка моно
  • Полный список функций

Ответ 3

В прошлом у меня есть Mapack, и я считаю, что это очень хорошо.

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

Ответ 5

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

Ответ 6

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

Ответ 8

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

Это с тех пор было завернуто в Microsoft XNA, что, вероятно, не очень хорошо для вас, но Статья в Википедии MDX рекомендует что-то называемое SlimDX, что может быть в порядке.

Ответ 9

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