玩转matlab之如何将矩阵市场(matrix market)下载的矩阵格式转换为matlab稀疏矩阵

释放双眼,带上耳机,听听看~!

矩阵市场收集了很多科学与工程实际问题离散后得到的大型稀疏矩阵,但是为了统一存储方式和提高效率,矩阵市场存储的矩阵格式并不是我们matlab可以直接使用的,本文介绍如何将下载的矩阵转化为matlab可以直接使用的稀疏矩阵。同时矩阵市场也提供转化为其他语言数据的方式,如Python,C语言、Fortran等等 。
假如我们要查找一个矩阵叫作 fidap036

打开矩阵市场主页

矩阵市场主页网址
如图所示,点击by matrix name 按名字查找。
玩转matlab之如何将矩阵市场(matrix market)下载的矩阵格式转换为matlab稀疏矩阵
找到自己的矩阵
玩转matlab之如何将矩阵市场(matrix market)下载的矩阵格式转换为matlab稀疏矩阵
这时候,发现有2种格式:
第一种是Matrix Market (.mtx 格式),中间right hand side 是方程组 Ax=b 的右端项b。
第二种是 Harwell—Boeing 即(HB 格式) .rua 格式 。
玩转matlab之如何将矩阵市场(matrix market)下载的矩阵格式转换为matlab稀疏矩阵

注:mtx格式的矩阵就是通常的坐标存储方式,记录所有非零元的行和对应的列,而HB格式是新的存储方式,按照某种压缩原理,记录非零元,简单讲就是HB格式效率更高,同样的矩阵,实验表明使用HB格式的方式比mtx格式节约近30%空间,是最流行的稀疏矩阵存储方式,详情参考矩阵市场主页。

下载两个格式矩阵文件

将两种格式都下载,解压到一个文件夹,例如 E:/work/,如图:

玩转matlab之如何将矩阵市场(matrix market)下载的矩阵格式转换为matlab稀疏矩阵

matlab加载矩阵

下面介绍如何加载矩阵
第一种mtx格式使用如下:需要子函数 mmread.m (文末有下载链接),新建一个脚本文件main.m,复制如下代码运行。

clear;clc;
filename = \'fidap036.mtx\';
[A,rows,cols,entries,rep,field,symm] = mmread(filename);

如图所示:
玩转matlab之如何将矩阵市场(matrix market)下载的矩阵格式转换为matlab稀疏矩阵
同理,第二种Harwell 格式 (.rua) 使用如下:需要子函数 hb_to_msm(文末有下载链接)

%%  HB to matlab matrix
clear;clc;

 filename = \'fidap036.rua\';
 A = hb_to_msm ( filename );

于是即可生成我们所需要的matlab稀疏矩阵格式。大家可以自己对照网页上面矩阵的性质进行验证,生成的矩阵是否正确。

注意:有的矩阵是对称矩阵,所以加载后得到的它的上三角或者下三角部分,需要自己在进行处理例如:如果得到的是下三角矩阵,那么需要A=A+tril(A,-1);    即,将其上三角部分补上。

附上子函数mmread和hb_to_msm下载网址

mmread.m 下载网址
其下载网页如图所示:
玩转matlab之如何将矩阵市场(matrix market)下载的矩阵格式转换为matlab稀疏矩阵
hb_to_msm.m 下载

提示:使用ctrl+A 和 ctrl+C 复制代码

其下载网页如图所示:
玩转matlab之如何将矩阵市场(matrix market)下载的矩阵格式转换为matlab稀疏矩阵

第一篇博客,欢迎大家多多交流。有问题请与我留言。QQ群:315241287

给TA打赏
共{{data.count}}人
人已打赏
随笔日记

RabbitMQ指南之四:路由(Routing)和直连交换机(Direct Exchange)

2020-11-9 4:42:11

随笔日记

我司使用了六年的分布式锁

2020-11-9 4:42:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索