Matlab 如何将稀疏矩阵写入文本文件
我想将稀疏矩阵写入文本文件。假设我的稀疏矩阵是Matlab 如何将稀疏矩阵写入文本文件,matlab,Matlab,我想将稀疏矩阵写入文本文件。假设我的稀疏矩阵是A。A的第一行在10,11索引处有非零值。第二行在1,2索引处具有非零值。然后,当我将数据写入文本文件时,它应该是这样的 10 11 1 2 ...... .... 如何在MATLAB中实现这一点?第一篇文章,所以不确定是否允许发布代码,但可能这就是您要寻找的 [rows, cols] = size(A); outFile = fopen('sparse.txt', 'a'); for m = 1:rows n = 1; while
A
。A
的第一行在10,11索引处有非零值。第二行在1,2索引处具有非零值。然后,当我将数据写入文本文件时,它应该是这样的
10 11
1 2
......
....
如何在MATLAB中实现这一点?第一篇文章,所以不确定是否允许发布代码,但可能这就是您要寻找的
[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
[行,列]=大小(A);
outFile=fopen('sparse.txt','a');
对于m=1:行
n=1;
当n给定约束条件时,对于给定格式,我只看到一个合理的选择:
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
一次提取所有行和列索引,但是这样我们就浪费了内存,无法有效地复制整个数据集,我们仍然需要以某种方式进行迭代
- 最大限度地减少高层工作量-让
的底层内部找到并将fprintf
矢量化,至少可以尽可能快地处理一行
有时,一个简单的循环确实是最好的选择——它很容易受到I/O的限制,因此循环本身的开销实际上应该可以忽略不计,即使是最少量的fprintf
调用。这是非常低效的。我的数据大小是200万乘10万。我不能把每一个都绕过去row@user34790这怎么样?每行的元素数是否始终相同?如果没有,是否有空行?您不关心这些条目的实际值吗?@LuisMendo。不,我不关心实际值。@不喜欢那样。每行的元素数可能不同