【问题标题】:In Matlab, how do you execute an fprintf command on an arbitrarily large matrix在 Matlab 中,如何在任意大的矩阵上执行 fprintf 命令
【发布时间】:2013-08-28 22:05:32
【问题描述】:

我正在使用 matlab 分析大型数据集。我希望能够在这个矩阵上按照 fprintf 命令的行运行一些东西,它有大约 22000 列。所以,这就是我目前的想法:

j=22;
for i = 1:j;
    fname = fopen(strcat('chr', num2str(i), '.out'), 'r');
    A = fscanf(fname, '%d', [1000,inf]);
    FIDW = fopen(strcat('chrproc', num2str(i), '.out'), 'w+');
    fprintf(FIDW, '%d\t%d\t%d\t%d\t%d\t%d\t\n', B);
end

有 22 个这种大小的文件将通过第 1-4 行转换为矩阵。但是,棘手的部分(至少对我而言)是 fprintf 要求您提供格式。因为这些文件太大了,所以没有真正的方法可以输入 %d\t。

也许 fgetl 命令更好?但是 fgetl 不会打印到文件,更重要的是, fgetl 返回一个字符串,这对我来说效果不佳。真的,像 fscanf 命令这样的东西会很棒,除了读取而不是打印......

非常感谢您的帮助和建议。

【问题讨论】:

  • 你想用制表符和换行符分隔的数据打印矩阵吗?
  • 如果这只是一个一次性的设计,我会把它放在一个循环中。它需要很快吗?

标签: matlab matrix scanf printf


【解决方案1】:

您可以使用此 matlab 文档中描述的选项之一。可能性是:

  • save -ascii(注意科学记数法)
  • dlmwrite
  • fprintf 正如您所提到的,格式定义为 fmt = repmat('%d\t',1,8);(8 将替换为您的实际列数)

或者,您可以使用以下名为saveascii 的文件交换功能。

【讨论】:

    【解决方案2】:

    Marsei 的回答是正确的。但是在 matlab 编码器中,我不得不采取不同的方法(也可以在常规 matlab 中工作):

    function printmatrix(matrix)
        matrix = matrix';%transpose
        [rows, cols] = size(matrix);
        format=['%-10g ' 0];
        for i=1:cols
            for j=1:rows
                fprintf(format,matrix(j,i));%Flipped because of matlab
            end
            fprintf('\n');
        end
        fprintf('Size of matrix: %g x %g\n', cols, rows);%Backwards because we invert it.
    end
    

    见: https://stackoverflow.com/questions/38601352/how-to-print-a-matrix-in-matlab-coder

    这也有效(但不适用于 matlab 编码器):

    m=magic(5);
    [rows cols] = size(m);
    x = repmat('%4.0f\t',1,(cols-1));
    fprintf([x,'%4.0f\n'],m');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多