在Accord.NET中创建和使用稀疏矩阵

问题描述 投票:0回答:1

我将不知如何在Accord.NET或C#中生成稀疏矩阵而无需从头开始创建库的任何提示。问题是我想制作一个大小为30k x 30k的矩阵,以表示图的邻接矩阵,该矩阵几乎总是稀疏的。超过15000行或列,以下代码将产生错误:

var A = new double[n, n];

错误:数组尺寸超出了支持的范围。

ps。我知道Sparse Class,但是从描述中可以看出,该类只能用于生成稀疏向量,不能用于矩阵。

如果可以制作稀疏矩阵,那么下一个紧迫的问题是,是否可以像线性代数运算中的普通矩阵一样对待它,例如在减去两个矩阵,或使用以下方法找到子矩阵:

Accord.Math.Matrix.Get(A, IVI, BVI, B);
sparse-matrix linear-algebra adjacency-matrix accord.net
1个回答
0
投票

30kx30k并不是很多。.尝试在“ Build”,“ Prefer 32 bit”中更改项目属性为未选中,然后您也可以尝试以下代码:Process.GetCurrentProcess()。MaxWorkingSet = new IntPtr(262144000);Process.GetCurrentProcess()。MinWorkingSet =新的IntPtr(209715200);对您的方法而言,如果内存不足以制作此数组可能会有所帮助。

无论如何,您都可以通过Nuget将此MathNet下载使用。MathNet.Numerics.LinearAlgebra.Double中的完全稀疏矩阵MathNet.Numerics.LinearAlgebra.Double.SparseMatrix M =新的MathNet.Numerics.LinearAlgebra.Double.SparseMatrix(30000);对我而言,此Math.Net看起来很慢,在某些操作中Accord更好,并且我不知道如何在Accord中做稀疏矩阵,而我不愿使用MathNet。

© www.soinside.com 2019 - 2024. All rights reserved.