1

我正在编写一个 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

任何人都可以建议如何去做吗?

4

2 回答 2

0

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

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

  ...
}

然后在一些地方使用它:

TreeMap<MatrixIndex,Double>

干杯

于 2013-07-09T21:00:53.087 回答
0

有一个la4j(Java 的线性代数)库可以用CRSMatrix/CCSMatrix稀疏矩阵类型和MatrixMarketStream类来处理这个问题。这是一个简短的例子:

源文件“matrix.mm”(具有 8 个非零元素的 5x5 矩阵):

%%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);
于 2013-07-12T06:54:38.263 回答