Matlab矩阵为大矩阵保存1个位置

时间:2016-03-22 02:56:20

标签: matlab csv matrix

我在Matlab中有一个稀疏矩阵。我希望将行中1的位置保存在行中和列中。

例如,考虑以下矩阵:

0 1 0 1 0
0 0 0 1 0
0 0 0 0 0
0 0 1 0 0
1 0 0 0 0

我想将两个文件写成: 行wise.csv:

1,2
1,4
2,4
4,3
5,1

列wise.csv:

5,1
1,2
4,3
1,4
2,4

我知道我可以按行或逐列运行循环并使用fprintf逐个元素保存,但是有更好的方法吗? 我处理的是非常大的矩阵,我想知道这样做的有效方法是什么?

1 个答案:

答案 0 :(得分:2)

您将要使用find执行此任务。然后将它们写入csv文件,您只需使用dlmwrite

对于列方式,您可以使用find的两个输出,它们是每个1的行索引和列索引(按列主要顺序)。

data = [0 1 0 1 0
        0 0 0 1 0
        0 0 0 0 0
        0 0 1 0 0
        1 0 0 0 0];

[row, col] = find(data);
M = [row, col];
dlmwrite('column-wise.csv', M);

然后,要获得行方式结果,您可以使用sortrows按行然后按列对列方式结果进行排序。

dlmwrite('row-wise.csv', sortrows(M))

替代方法是在数据转置上再次执行find(强制行主要排序),但我认为sortrows方法更快。

[col, row] = find(data.');
dlmwrite('row-wise.csv', [row, col])