1

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

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

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

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

4

2 回答 2

0

仅用于find获取非零元素的行、列和值并将它们保存为文本、csv 或...:

[row, col, v] = find(my_spares_matrix);
于 2016-09-06T04:43:46.290 回答
0

下面是一个使用MFL的代码片段,它将导致稀疏矩阵中所有值的类似 MATLAB 的打印输出

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 文件以(二进制)压缩稀疏列 (CSC)格式存储稀疏数据,与 CSV 文件相比,加载该格式的开销要少得多。

于 2019-07-08T18:01:32.060 回答