用坐标存储系统创建稀疏矩阵



我正在编写一个java程序,该程序涉及处理包含浮点值的1058 X 1058矩阵。这个矩阵包含许多零值,所以我需要将其存储为稀疏矩阵,然后使用这个矩阵生成生成生成树。我检查了许多流行的库,如Colt、Jama,但不知何故,我无法将它们用于我的代码。我想要一个坐标存储系统(类似于在matlab中使用sparse()函数获得的),如下所示:

(1055,1045)    1.0000
(1056,1045)    1.0000
(1057,1045)    1.0000
(1058,1045)    1.0000
(1047,1046)    1.0000
(1048,1046)    1.0000
(1049,1046)    1.0000
(1050,1046)    1.0000
(1051,1046)    1.0000
(1052,1046)    1.0000
(1053,1046)    1.0000
(1054,1046)    1.0000
(1055,1046)    1.0000

有人能建议怎么做吗?

您可以在没有任何lib的情况下快速完成。创建以下类:

MatrixIndex implements Comparable<MatrixIndex>
{
  private final int _x;
  private final int _y;
  ...
}

然后在某些情况下使用:

TreeMap<MatrixIndex,Double>

干杯

有一个la4j(Java线性代数)库,它使用CRSMatrix/CCSMatrix稀疏矩阵类型和MatrixMarketStream类来处理此问题。下面是一个简单的例子:

源文件"matrix.mm"(5x5矩阵,包含8个非零元素):

%%MatrixMarket matrix coordinate real general
5  5  8
1     1   1.000e+00
2     2   1.050e+01
3     3   1.500e-02
1     4   6.000e+00
4     2   2.505e+02
4     4  -2.800e+02
4     5   3.332e+01
5     5   1.200e+01

Java源代码(la4j用法):

Matrix a = new CRSMatrix(Matrices.asMatrixMarketSource(
                           new FileInputStream(new File("matrix.mm"))));
System.out.println("DET(A) = " + a.determinant());

关于MatrixMarket格式,请阅读此处。关于CRS/CCS格式,请阅读此处和此处。

要生成MatrixMarket输出,请使用以下代码:

Matrix a = new CRSMatrix(...);
MatrixStream out = new MatrixMarketStream(new FileOutputStream(
                        new File("matrix.mm")));
out.writeMatrix(a);

相关内容

  • 没有找到相关文章

最新更新