在 Java 中读取和处理 .mat 文件(邻接矩阵)

Reading and Processing .mat file (Adjacency Matrix) in Java

我已经涵盖了很多 Whosebug 问题和 Google 搜索结果,阅读了许多讨论主题,但我找不到适合我的问题的任何答案。我有一个 .mat 格式的稀疏矩阵,其中包含 36600 个节点(36600x36600 邻接矩阵)以在 Java 环境中读取和操作(如矩阵向量乘法)。我应用了此处讨论的许多答案,但尽管该 .mat 文件中有数据,但我总是收到 NullPointerException 错误。(有人说这些结果是因为数据的大小)我已将以下代码应用到我的 .mat 文件中 return null 和 NullPointerException。

MatFileReader matfilereader = new MatFileReader("sourceData.mat");
MLArray mlArrayRetrieved = matfilereader.getMLArray("data");
System.out.println(mlArrayRetrieved);
System.out.println(mlArrayRetrieved.contentToString());

我也曾多次尝试在 MATLAB 环境和 Jupyter Notebook 的 Python 环境中将 .mat 文件转换为 .csv 或 .xls,但是,这些时候我也没有得到任何结果。

该 .mat 文件将成为邻接矩阵,并将成为 Cytoscape 项目中特定算法的来源。因此,我必须在 Java 环境中使用它,并且我决定使用 COLT 库进行矩阵操作。建议和建议将对我有很大帮助。谢谢阅读。

只需使用 find 获取非零元素的行、列和值并将它们保存为文本、csv 或...:[=​​12=]

[row, col, v] = find(my_spares_matrix);

下面是使用 MFL 的代码片段,它会导致 MATLAB-like 输出稀疏矩阵中的所有值

Mat5.readFromFile("sourceData.mat")
    .getSparse("data")
    .forEach((row, col, real, imag) -> {
        System.out.println(String.format("(%d,%d) \t %1.4f ", row + 1, col + 1, real));
    });

CSV 解决方法适用于上述 750KB 矩阵,但一旦数据集超过 50MB,它可能会变得难以处理。 MAT 文件以(二进制)Compressed Sparse Column (CSC) 格式存储稀疏数据,与 CSV 文件相比,加载这种格式的开销要小得多。