【问题标题】:MATLAB: fprintf/sprintf to print string + matrixMATLAB:fprintf/sprintf 打印字符串 + 矩阵
【发布时间】:2015-11-02 16:49:12
【问题描述】:

我想知道,是否可以打印一个字符串后跟一个矩阵,以经典形式编写,例如:

                     5 5 9
>>your matrix is M = 1 4 2
                     2 1 3

使用fprintf/sprintf

【问题讨论】:

    标签: matlab matrix vector printing printf


    【解决方案1】:

    如果您的矩阵不必与文本在同一行,您可以做一些简单的事情,例如在mat2str 的输出中将; 替换为\n

    A=[1 2 3; 4 5 6; 7 8 9];
    intro_str = 'Your matrix is:\n';
    sprintf([intro_str strrep(mat2str(A),';','\n ')])
    

    Your matrix is:
    [1 2 3
     4 5 6
     7 8 9]
    

    但是,如果您想将它们放在同一行,那么我了解如何做到这一点的唯一方法是计算每个“非介绍”上所需的制表符 (\t) 或空格的数量行,大概是这样的:

    A=[1 2 3; 4 5 6; 7 8 9];
    
    intro_str = 'Your matrix is: ';
    
    %// ntabs = ceil(length(intro_str)/3);
    %// tab_blanks = cellstr(repmat('\t',size(A,2),ntabs));
    spaces = blanks(length(intro_str));
    space_blanks = repmat(spaces,size(A,2),1);
    
    mid_row = ceil(size(A,1)/2);
    
    %// tab_blanks(mid_row) = {intro_str};
    space_blanks(mid_row,:) = intro_str;
    
    final_str = [space_blanks repmat('%u\t',size(A,1),size(A,2)) repmat('\n',size(A,1),1)]';
    final_str = horzcat(final_str(:))';
    
    sprintf(final_str,A(:))
    

    ans =
    
                    1   4   7   
    Your matrix is: 2   5   8   
                    3   6   9
    

    【讨论】:

    • 您提出的两个解决方案都会很有用:感谢您第二次耐心回答我,@Dev-iL :)
    • @user5512412 - 不客气。另外,请查看this out
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多