我想在文本文件中写一个稀疏矩阵。假设我的稀疏矩阵是A
。A
的第一行在第10,11个索引处具有非零值。第二行在第1,2个索引处具有非零值。然后,当我将数据写入文本文件时,它应该看起来像这样
10 11
1 2
......
....
我怎样才能在MATLAB中做到这一点?
答案 0 :(得分:0)
第一篇文章,所以不确定是否允许发布代码,但也许这就是您要找的内容?
[rows, cols] = size(A);
outFile = fopen('sparse.txt', 'a');
for m = 1:rows
n = 1;
while n <= cols
if A(m, n) ~= 0
fprintf(outFile, '%d ', A(m, n));
end
n = n+1;
end
fprintf(outFile, '\r\n');
end
答案 1 :(得分:0)
鉴于这些限制,我只能看到给定格式的一个合理选项:
f = fopen('out.txt', 'w');
for ii=1:size(mat, 1)
fprintf(f, '%u ', find(mat(ii, :));
fprintf(f, '\n');
end
fclose(f);
由于每行的元素数量不是常数,这意味着两件事:
fprintf
提供一个常量格式字符串来在一次调用中写入一个或多个整行,因此我们遇到了多次fprintf
次调用。因此,优化这些约束;
find
同时提取行和列索引,但是我们浪费了内存来有效地复制整个数据集,我们仍然必须以某种方式迭代。find
和向量化fprintf
的低级内部至少尽可能快地处理单行。有时一个简单的循环确实是最好的选择 - 无论如何它都可能是I / O绑定的,所以与最小数量的fprintf
调用相比,循环本身的开销实际上应该可以忽略不计。 / p>