我的任务是将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矩阵。
我做错了什么?
答案 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
文件。