将特定格式的矩阵写入matlab的文本文件中

时间:2014-04-04 00:20:54

标签: matlab

我有这个稀疏的大小矩阵,可以说N x M

我想将数据写入文件,每行代表每一行。从该行中非零条目的数量开始。其次是指数,其值为非零空间,如下:

186 0:1 1:34 2:234 ...
123 0:23 2:23 6:303

其中186表示第一行中的非零数。 0代表第一列及其对应的值1。接下来是第一行的第一列值34,依此类推。

类似地,对于第二行,123是非零值的数量。 0代表第一列及其对应的值23,依此类推。

我怎样才能在matlab中有效地做到这一点?

1 个答案:

答案 0 :(得分:0)

使用find命令获取稀疏矩阵的索引和值。如果你在矩阵的转置上执行此操作,结果索引将按行号排序,您可以轻松地将它们写入文件:

%// get the nonzero indices and values of matrix A
[jj, ii, val]=find(A.');

%// find the number of nonzeros in each row:
n_nonzero=full(sum(A~=0,2));

%// write to output file
fid = fopen('filename.txt','w');
counter=1;
for rownum=1:size(A,1)
    %// write number of nonzero elements
    fprintf(fid,'%d',n_nonzero(rownum));

    %// write array indices and values
    %// assumes integer values for the array (as in your example)
    I = counter:counter+n_nonzero(rownum)-1;
    fprintf(fid,' %d:%d',[jj(I) val(I)]');
    fprintf(fid,'\n'); %// new line

    %// increment counter
    counter = counter + n_nonzero(rownum);
end
fclose(fid);

如果矩阵具有非整数值,则应更改格式字符串以打印相应的格式。另外,你说你希望每一行都在一个单独的行上,所以我在打印每一行后添加了一行,即使你的例子没有显示这一行。