我正在编写一个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
有人可以建议怎么做吗?
答案 0 :(得分:0)
你可以在没有任何lib的情况下快速完成。创建以下类:
MatrixIndex implements Comparable<MatrixIndex>
{
private final int _x;
private final int _y;
...
}
然后在某些地方使用它:
TreeMap<MatrixIndex,Double>
干杯
答案 1 :(得分:0)
有la4j(线性代数for Java)库,可以使用CRSMatrix
/ CCSMatrix
稀疏矩阵类型和MatrixMarketStream
类来处理此问题。这是一个简短的例子:
源文件&#34; matrix.mm&#34; (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格式,请阅读here。关于CRS / CCS格式,请阅读here和here。
要生成MatrixMarket输出,请使用以下代码:
Matrix a = new CRSMatrix(...);
MatrixStream out = new MatrixMarketStream(new FileOutputStream(
new File("matrix.mm")));
out.writeMatrix(a);