如何将稀疏矩阵的非零元素转储到非稀疏矩阵中

时间:2015-04-11 01:29:36

标签: matlab octave

我本来也问过如何将稀疏矩阵转储到CSV基本上我有一个表示为稀疏矩阵的图形,我想将图形导出为CSV以在Gephi中打开它。所以我的稀疏矩阵是这样的:

(23,35) 1

(35,78) 1

(78,23) 1

我想将其转换为以下矢量: [23,35,1;35,78,1;78,23,1]

我很想知道那里有一个简单的单行程,但是我不能让我的大脑找到它,所以非常感谢你的帮助。

如果您在文件中生成了sparse2csv('graph.csv',Adj)之类的内容:

23,35,1

35,78,1

78,23,1

然后这也会奏效。

1 个答案:

答案 0 :(得分:3)

想到的方式不是单行(尽管可以通过函数很容易地制作一个)但只使用两个函数调用:findnonzeros

A       = sparse([23;35;78],[35;78;23],[1;1;1]);
[r,c]   = find(A~=0);
v       = nonzeros(A);
compact = [r,c,v];
disp(compact);

返回

78    23     1
23    35     1
35    78     1

正如Luis Mendo在评论中指出的那样,存在一个更简单的解决方案,因为find将在第三个输出参数中返回非零值(给定的数组现在不再合乎逻辑):

[r,c,v] = find(A);
compact = [r,c,v];