【发布时间】:2011-08-07 03:37:38
【问题描述】:
我有一个纯文本数据文件 (.dat),其中包含我想导入 MATLAB 的稀疏矩阵信息。有点像:
(1,2) 1
(2,3) 2
以此类推,我们在左列中获得了矩阵位置的索引,在右列中获得了要到达那里的值。到处搜索并没有找到一个很好且简单的方法来做到这一点,但是我没有大量的 MATLAB 经验,所以我不知道我是否遗漏了一些明显的东西。
【问题讨论】:
我有一个纯文本数据文件 (.dat),其中包含我想导入 MATLAB 的稀疏矩阵信息。有点像:
(1,2) 1
(2,3) 2
以此类推,我们在左列中获得了矩阵位置的索引,在右列中获得了要到达那里的值。到处搜索并没有找到一个很好且简单的方法来做到这一点,但是我没有大量的 MATLAB 经验,所以我不知道我是否遗漏了一些明显的东西。
【问题讨论】:
您可以尝试使用scanf。下面是一些代码:
fid = fopen('sparse.dat', 'rt');
[m n] = fscanf(fid, '(%d,%d) %d\n');
fclose(fid);
m = reshape(m, 3, length(m)/3)';
% m should now be:
% [1 2 1; 2, 3, 2]
【讨论】:
你可以使用函数spconvert
例子:
假设 ASCII 文件 uphill.dat 包含
1 1 1.000000000000000
1 2 0.500000000000000
2 2 0.333333333333333
1 3 0.333333333333333
2 3 0.250000000000000
3 3 0.200000000000000
1 4 0.250000000000000
2 4 0.200000000000000
3 4 0.166666666666667
4 4 0.142857142857143
4 4 0.000000000000000
然后是语句
load uphill.dat
H = spconvert(uphill)
H =
(1,1) 1.0000
(1,2) 0.5000
(2,2) 0.3333
(1,3) 0.3333
(2,3) 0.2500
(3,3) 0.2000
(1,4) 0.2500
(2,4) 0.2000
(3,4) 0.1667
(4,4) 0.1429
【讨论】: