无法将稀疏矩阵正确加载到 Octave 中
Can't load sparse matrix correctly into Octave
我的任务是从 The University of Florida Sparse Matrix Collection into GNU Octave. I need to study different ordering algorithms, like symamd 加载对称正定义稀疏矩阵,但我无法使用它们,因为矩阵未存储为平方
我选择了例如bcsstk17。
我尝试了不同的 load methods .mat 文件:
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
但是其中 none 个有效,因为我工作区的变量是空的。
当我加载 Matrix Market 格式 mtx 时,加载 bcsstk17.mtx 我得到一个 219813x3 矩阵。
我试过 full command 但我得到了相同的 219813x3 矩阵。
我做错了什么?
不确定为什么要加载 .mtx
文件,而那里提供了 matlab/octave 特定的 .mat
格式。
只需下载 bcsstk17.mat 文件,然后加载它:
load bcsstk17.mat
然后您将在您的工作区中看到一个名为 Problem
的变量,它是结构类型。这包含几个字段,包括一个 A
字段,它似乎以稀疏矩阵的形式保存您的数据。换句话说,您的数据可以作为 Problem.A
访问
您根本不应该为 .mtx
文件操心。但是为了完成,我将解释您在加载它时看到的内容。 .mat
文件是二进制格式。然而,.mtx
文件似乎是一种人类可读的格式(即它包含正常的 ASCII 文本)。特别是它似乎由一个包含注释的 'header' 组成,注释以 %
字符开头,
一行似乎编码了每个维度中稀疏矩阵的大小,
然后它包含 "space-delimited" 数据,其中每一行大概代表矩阵中的一个元素,三列大概代表行、列和该元素的值。
当 matlab 遇到包含数据(+注释)的 ASCII 文件时,无论扩展名如何,只要数据看起来像一个有效的二维数字数组,它就会加载将此文件的 data 内容复制到与文件同名的变量中。
显然这不是你想要的。尤其是因为第一行将被解释为 Nx3 矩阵中的普通数据行。换句话说,matlab/octave 只是加载一个它认为是基于文本的标准文件,并将它在内部看到的值加载到一个变量上。就 matlab/octave 而言,这里的扩展名 .mtx
是无关紧要的,并且绝对不会以与 .mtx
规范相关的任何方式解释或解码 .mtx
文件。
我的任务是从 The University of Florida Sparse Matrix Collection into GNU Octave. I need to study different ordering algorithms, like symamd 加载对称正定义稀疏矩阵,但我无法使用它们,因为矩阵未存储为平方
我选择了例如bcsstk17。
我尝试了不同的 load methods .mat 文件:
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
但是其中 none 个有效,因为我工作区的变量是空的。
当我加载 Matrix Market 格式 mtx 时,加载 bcsstk17.mtx 我得到一个 219813x3 矩阵。
我试过 full command 但我得到了相同的 219813x3 矩阵。
我做错了什么?
不确定为什么要加载 .mtx
文件,而那里提供了 matlab/octave 特定的 .mat
格式。
只需下载 bcsstk17.mat 文件,然后加载它:
load bcsstk17.mat
然后您将在您的工作区中看到一个名为 Problem
的变量,它是结构类型。这包含几个字段,包括一个 A
字段,它似乎以稀疏矩阵的形式保存您的数据。换句话说,您的数据可以作为 Problem.A
您根本不应该为 .mtx
文件操心。但是为了完成,我将解释您在加载它时看到的内容。 .mat
文件是二进制格式。然而,.mtx
文件似乎是一种人类可读的格式(即它包含正常的 ASCII 文本)。特别是它似乎由一个包含注释的 'header' 组成,注释以 %
字符开头,
一行似乎编码了每个维度中稀疏矩阵的大小,
然后它包含 "space-delimited" 数据,其中每一行大概代表矩阵中的一个元素,三列大概代表行、列和该元素的值。
当 matlab 遇到包含数据(+注释)的 ASCII 文件时,无论扩展名如何,只要数据看起来像一个有效的二维数字数组,它就会加载将此文件的 data 内容复制到与文件同名的变量中。
显然这不是你想要的。尤其是因为第一行将被解释为 Nx3 矩阵中的普通数据行。换句话说,matlab/octave 只是加载一个它认为是基于文本的标准文件,并将它在内部看到的值加载到一个变量上。就 matlab/octave 而言,这里的扩展名 .mtx
是无关紧要的,并且绝对不会以与 .mtx
规范相关的任何方式解释或解码 .mtx
文件。