MTX文件是 Matrix Market(矩阵仓库) 的标准交换格式,也称为MM文件,能表达稀疏(Sparse)和稠密(Dense)矩阵。本文简要介绍MTX文件格式。

MTX文件格式

MTX文件特点

1. 纯文本格式;

2. 支持注释,以百分号(%)开头的行是注释;

3. 稀疏矩阵使用COO(coordinate)格式存储

4. 一般的稠密矩阵使用 向量(array)格式存储。

MTX文件组成

MTX文件由4部分组成:

1. 头行(banner line/header line):包含文件格式标志,以及4个文本字段

2. 注释行(comment lines):用户提供的矩阵信息或者注释;

3. 尺寸行(size line):定义矩阵的尺寸,即矩阵的行列数量,对于稀疏矩阵还提供非零元个数;

4. 数据行(data lines):存储矩阵的数据

接下来分别对这4部分做介绍。

MTX文件格式详解

头行的格式为

%MatrixMarket object format field symmetry

头行必须是文件的第一行,并且必须以 %MatrixMarket%%MatrixMarket 开始。其余4个字段的取值为:

  • object:通常是 matrix,另一个合法值是 vector,可以认为是矩阵的特殊形式;
  • format:coordinate 或者 array,前者用于稀疏矩阵,后者用于稠密矩阵或者向量;
  • field:合法值是 realdoublecomplexinteger or pattern一般用 double 或者 complex,单精度使用 real,整数矩阵使用 integer;如果是 pattern,必须使用coordinate格式,并且只列出非零元所在的行列;
  • symmetry:是否对称,合法值包括 general(一般矩阵)、symmetric(对阵矩阵)、skew-symmetric(转置取负)和hermitian(复数对称)。出了general,其余三种格式要求只列出下三角数据。

 

注释行只需要在头行之后,以百分号开头就好了。

 

尺寸行分两种情况,如果头行给出的format(格式)是 array,只需要给出矩阵的行列数量:

m n

如果格式是 coordinate,需要给出行列数量和非零元个数:

m n nnz

 

最后是数据行,其要求为:

如果格式是 array,必须有 m*n 行,按照列优先(column-oriented)的顺序每行给出一个矩阵元素的值:

value
# 如果矩阵是复数,则给出两个实数
real image

如果格式是 coordinate,必须有 nnz 行,每一行给出非零元的坐标和值:

i j value
# 如果矩阵是复数,value由两个实数给出
i j real image
# 如果field是pattern,则只有非零元的坐标
i j

可以看到,MTX文件格式简单易懂,程序上实现也非常容易。

 参考

1. The Matrix Market File Format

2. Matrix Market Exchange Formats