【问题标题】:How to display (print) vector in Matlab?如何在 Matlab 中显示(打印)向量?
【发布时间】:2013-02-17 17:56:55
【问题描述】:

我有一个矢量x = (1, 2, 3),我想将它显示(打印)为Answer: (1, 2, 3)

我尝试了很多方法,包括:

disp('Answer: ')
strtrim(sprintf('%f ', x))

但我仍然无法以我需要的格式打印它。

有人可以指点我的解决方案吗?

编辑: x 的值和(长度)都事先不知道。

【问题讨论】:

    标签: matlab printf disp


    【解决方案1】:

    我更喜欢以下,更简洁:

    x = [1, 2, 3];
    g=sprintf('%d ', x);
    fprintf('Answer: %s\n', g)
    

    哪个输出

    Answer: 1 2 3
    

    【讨论】:

    • 这个答案的问题是,对于一个矩阵,所有的行都会排成一行。
    • 对,sprintf 只能与数组参数一起使用,因此矩阵会变平。您应该将此应用于每一行并连接结果。
    【解决方案2】:

    你可以使用

    x = [1, 2, 3]
    disp(sprintf('Answer: (%d, %d, %d)', x))
    

    这会导致

    Answer: (1, 2, 3)
    

    对于任意大小的向量,可以使用

    disp(strrep(['Answer: (' sprintf(' %d,', x) ')'], ',)', ')'))
    

    另一种方法是

    disp(strrep(['Answer: (' num2str(x, ' %d,') ')'], ',)', ')'))
    

    【讨论】:

    • fprintf('%s%s\b\b%s\n', 'Answer: (', sprintf('%d, ',x), ')'); 好像更清晰,( 后面不输出空格。
    • @RomanShapovalov:我尽量避免使用退格键\b,因为如果您将输出捕获到文件中,它将包含文字退格键。
    • 有道理。您可以修改代码以打印'%d, '(注意空格的位置),然后将', )' 替换为')',以避免空格过多。
    • 在代码中看到,') ')'], ',)', ')')) 让我不寒而栗,努力分辨哪些是字符串,哪些是代码的一部分……不寒而栗跨度>
    【解决方案3】:

    这是利用 Matlab 的 strjoin 函数的另一种方法。使用strjoin,可以轻松自定义值之间的分隔符。

    x = [1, 2, 3];
    fprintf('Answer: (%s)\n', strjoin(cellstr(num2str(x(:))),', '));
    

    这会导致:Answer: (1, 2, 3)

    【讨论】:

      【解决方案4】:

      你可以试试这个方法:

      fprintf('%s: (%i,%i,%i)\r\n','Answer',1,2,3)
      

      我希望这会有所帮助。

      【讨论】:

      • 感谢您的回答,但在运行程序之前我不知道答案。想了想,很明显。另外,我什至不知道结果向量的长度。所以我需要一些通用的解决方案。
      • 对不起,我刚刚回复了你的帖子:我想你可能会说你正在寻找解决问题的一般方法。
      【解决方案5】:

      这是一个更通用的解决方案,它以这种格式打印向量 x 的所有元素:

      x=randperm(3);
      s = repmat('%d,',1,length(x));
      s(end)=[]; %Remove trailing comma
      
      disp(sprintf(['Answer: (' s ')'], x))
      

      【讨论】:

      • 最后一行不应该是disp(['Answer: (' s ')']);吗?
      • @H.Muster 这不会传递 x 的值,它会打印:Answer: (%d,%d,%d)。请注意,repmat 只是创建语法
      • 你是对的;我误读了您的代码的第二行,因此误判了最后一行。
      【解决方案6】:

      打印一个可能有复数的向量-

      fprintf('Answer: %s\n', sprintf('%d ', num2str(x)));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-10
        相关资源
        最近更新 更多