导入<<(索引,索引)值>>形式的数据转化为稀疏矩阵

发布于 2024-11-01 19:55:11 字数 221 浏览 3 评论 0 原文

我有一个纯文本数据文件 (.dat),其中包含稀疏矩阵信息,我想将其导入到 MATLAB 中。它看起来有点像:

(1,2)    1    
(2,3)    2

依此类推,我们在左侧列中获得了矩阵位置的索引,在右侧列中获得了该值。四处搜索并没有找到一个好的、简单的方法来做到这一点,但我没有大量的 MATLAB 经验,所以我不知道我是否遗漏了一些明显的东西。

I've got a plain text data file (.dat) containing sparse matrix information that I'd like to import into MATLAB. It looks a bit like:

(1,2)    1    
(2,3)    2

And so forth, where we've got the index for matrix position in the left hand column, and the value to go there in the right. Searching around hasn't turned up a nice and easy way to do this, but I don't have an overwhelming amount of experience with MATLAB, so I don't know if I'm missing something obvious.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

执着的年纪 2024-11-08 19:55:11

您可以使用函数 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

Then 语句

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

You can use function spconvert

Examples:

Suppose the ASCII file uphill.dat contains

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

Then the statements

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
失而复得 2024-11-08 19:55:11

您可以尝试使用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]

You can try using scanf. Here's some code to start with:

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]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文