无法将稀疏矩阵正确加载到Octave中

时间:2017-05-22 21:00:34

标签: octave

我的任务是将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

但是没有一个工作,因为我的工作区的变量都是空的。

当我加载矩阵市场格式mtx时,加载bcsstk17.mtx 我得到一个219813x3矩阵。

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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

只需下载bcsstk17.mat文件,然后加载它:

load bcsstk17.mat

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

进行访问

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

当matlab遇到包含数据(+注释)的ASCII文件时,无论扩展名如何,只要数据看起来像有效的2D数组一样,它就会加载数据此文件的内容到与文件同名的变量上。

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