Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何将稀疏矩阵写入文本文件_Matlab - Fatal编程技术网

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。不,我不关心实际值。@不喜欢那样。每行的元素数可能不同