Создание и использование разреженной матрицы в Accord.NET - PullRequest
0 голосов
/ 03 марта 2020

Буду признателен за любую подсказку о том, как создать разреженную матрицу в Accord. NET или C#, не создавая библиотеку с нуля. Проблема в том, что я хочу сделать матрицу размером 30k на 30k, представляющую матрицу смежности графа, которая почти всегда будет разреженной. После 15000 строк или столбцов следующий код генерирует ошибку:

var A = new double[n, n];

ошибка: размеры массива превысили поддерживаемый диапазон.

пс. Мне известен разреженный класс , но, как видно из описания, этот класс можно использовать только для создания разреженных векторов, а не матриц.

Если возможно создать разреженную матрицу, то следующий вопрос состоит в том, можно ли ее рассматривать как обычную матрицу в операциях линейного алгебраического алгоритма c, например, при вычитании двух матриц или поиске подматрицы используя:

Accord.Math.Matrix.Get(A, IVI, BVI, B);

1 Ответ

0 голосов
/ 05 марта 2020

30kx30k не очень много .. Попробуйте изменить свойства вашего проекта в «Построить», «Предпочитать 32-битный», чтобы не проверять, затем вы также можете попробовать этот код: Process.GetCurrentProcess (). MaxWorkingSet = new IntPtr (262144000 ); Process.GetCurrentProcess (). MinWorkingSet = new IntPtr (209715200); к вашему методу, это может помочь, если есть проблема с памятью для создания этого массива. Точно разреженная матрица из Mat hNet .Numerics.LinearAlgebra.Double Mat hNet .Numerics.LinearAlgebra.Double.SparseMatrix M = новый Mat hNet .Numerics.LinearAlgebra.Double.SparseMatrix (30000) ; Эта математика. Net выглядит медленно для меня, Accord лучше в некоторых операциях, и я не знаю, как сделать разреженную матрицу в Accord, которую я бы лучше использовал, чем Mat hNet.

...