【问题标题】:Can't load sparse matrix correctly into Octave无法将稀疏矩阵正确加载到 Octave
【发布时间】:2017-05-22 21:00:33
【问题描述】:

我的任务是将The University of Florida Sparse Matrix Collection 中的对称正定义稀疏矩阵加载到 GNU Octave 中。我需要研究不同的排序算法,比如symamd,但我不能使用它们,因为矩阵没有存储为平方

我选择了例如bcsstk17

我用 .mat 文件尝试了不同的 load methods

load -mat bcsstk17
load -mat-binary bcsstk17
load -6 bcsstk17
load -v6 bcsstk17
load -7 bcsstk17
load -mat4-binary bcsstk17
error: load: can't read binary file
load -4 bcsstk17

但它们都不起作用,因为我的工作区的变量是空的。

当我加载 Matrix Market 格式 mtx,load bcsstk17.mtx 我得到一个 219813x3 矩阵。

我尝试了full command,但得到了相同的 219813x3 矩阵。

我做错了什么?

【问题讨论】:

    标签: octave


    【解决方案1】:

    当那里提供了 matlab/octave 特定的 .mat 格式时,不确定为什么要尝试加载 .mtx 文件。

    只需下载 bcsstk17.mat 文件并加载它:

    load bcsstk17.mat
    

    然后您将在您的工作区中看到一个名为Problem 的变量,它的类型为struct。这包含几个字段,包括一个A 字段,它似乎以稀疏矩阵的形式保存您的数据。换句话说,您的数据可以通过Problem.A访问


    您根本不应该为.mtx 文件而烦恼。但是为了完成,我将解释您在加载它时看到的内容。 .mat 文件是二进制格式。但是,.mtx 文件似乎是人类可读的格式(即它包含正常的 ASCII 文本)。特别是它似乎由一个包含 cmets 的“标题”组成,它以 % 字符开头, 似乎编码每个维度中稀疏矩阵大小的行, 然后它包含“空格分隔”的数据,其中每一行可能代表矩阵中的一个元素,而三列可能代表该元素的行、列和值。

    当matlab遇到一个包含数据(+cmets)的ASCII文件时,不管扩展名如何,只要数据看起来像一个有效的二维数字数组,它就会加载数据 将此文件的内容复制到与该文件同名的变量中。

    显然这不是你想要的。尤其是因为第一行将被解释为 Nx3 矩阵中的正常数据行。换句话说,matlab/octave 只是加载一个它认为是基于文本的标准文件,并将它在里面看到的值加载到一个变量中。就 matlab/octave 而言,这里的扩展 .mtx 是无关紧要的,它绝对不会以任何与 .mtx 规范相关的方式解释或解码 .mtx 文件。

    【讨论】:

    • 谢谢,没有意识到我正在加载一个结构
    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多