Расчет большой разрешенной матрицы - MathNet Numerics

0 GeoGecco [2015-06-27 17:41:00]

Я начал использовать MathNet Numerics Library, и мне нужно, чтобы он вычислил самые большие собственные значения, соответствующие их собственным векторам моей матрицы смежности.

При использовании большого количества точек моя матрица смежности становится довольно большой (т.е. 5782x5782 записей)

Большинство записей - "0", поэтому я решил использовать "SparseMatrix". Но когда я его использую, для вычислений все еще требуется возраст. На самом деле я никогда так долго не ждал, пока он не закончится. Я пробовал все это в Matlab, и проблем не было вообще. Matlab решил это в течение нескольких секунд.

У вас есть предложения для меня?

Вот что я делаю:

// initialize matrix and fill it with zeros
Matrix<double> A = SparseMatrix.Create(count, count, 0);

... fill matrix with values ...

// get eigenvalues and eigenvectors / this part takes centuries =)
Evd<double> eigen = A.Evd(Symmetricity.Symmetric);
Vector<Complex> eigenvector = eigen.EigenValues;

math c# .net graph mathdotnet


1 ответ


0 M2X [2015-11-13 18:51:00]

Реализация Math.Net Numerics основана исключительно на С#. Поэтому производительность может быть несовместимой с такими инструментами, как MATLAB, поскольку они в основном полагаются на собственные и высоко оптимизированные библиотеки BLAS для выполнения численных вычислений.

Вы можете использовать собственные оболочки, которые поставляются вместе с Math.Net, которые используют высоко оптимизированные библиотеки линейной алгебры (такие как Intel MKL или AMD ACML). На этой странице MSDN есть руководство, в котором объясняется, как построить Math.NET с поддержкой ACML (см. Раздел "Компиляция и использование AMD ACML в Math.NET Numerics").