【问题标题】:MATLAB sprintf from two arrays来自两个数组的 MATLAB sprintf
【发布时间】:2015-02-17 09:29:15
【问题描述】:

假设我有以下两个数组

x=[1 2 3 4 5 ];
y=[3 8 9 12 44];

现在我希望使用 sprintf 从它们中创建一个字符串,它将按如下方式显示给我:

x1 = 3
x2 = 8
x3 = 9
x4 = 12
x5 = 44

但我无法让它正常工作。这就是我目前所拥有的(我知道这可能是非常错误的,因为我一直在玩代码并且可能在此过程中更加混乱)

str = '';
for ii = 1:length(x)
    str = sprintf('x%d= %d \n',x,y)
end
str

【问题讨论】:

    标签: arrays string matlab


    【解决方案1】:

    你几乎猜对了。不需要 for 循环:

    sprintf('x%d = %d\n',[x;y])
    

    【讨论】:

      【解决方案2】:

      您可以将arrayfun 用于cell 数组作为输出-

      arrayfun(@(n) ['x' num2str(x(n)) ' = ' num2str(y(n))],1:numel(x),'Uni',0).'
      

      代码运行-

      ans = 
          'x1 = 3'
          'x2 = 8'
          'x3 = 9'
          'x4 = 12'
          'x5 = 44'
      

      如果您想将 char 数组作为输出,请将其用 char() 包装起来,给我们 -

      ans =
      x1 = 3 
      x2 = 8 
      x3 = 9 
      x4 = 12
      x5 = 44
      

      【讨论】:

      • 我认为还有比这更简单的方法。
      【解决方案3】:

      sprintf 函数没有您期望的向量行为。该函数实际上查看每个元素。请注意,说明符 %d 是 int 而不是 in 向量。这意味着对于您的函数调用,sprintf 会看到与向量 [x,y] 等效的内容。但是,当函数查找元素时,它是按列完成的。所以有两种解决方案。

      1) 对元素使用子索引(不推荐)。这也不会重复相同的函数调用 5 次。

      str = {};
      for ii = 1:length(x)
          str{ii} = sprintf('x%d= %d \n',x(ii),y(ii));
      end
      str
      

      这实际上会给你一个单元格并为此生成一个矩阵会很烦人

      2) 使用矢量化输入(推荐)。由于sprintf 按列读取矩阵,因此您可以使用格式正确的矩阵。

      str = sprintf('x%-2d = %d \n',[x;y])
      

      【讨论】:

      • 您确定第二个解决方案是 OP 所追求的吗?我运行它,我得到了str= x=3 ... 等。它在输出中有单词str。
      • @kkuilla - 他的第二个只需要 [x;y] 而不是 x,y。它完美运行时:)
      • @kkuilla 我不知道你是怎么得到这个的,你应该再试一次。根据问题OP希望将字符串保存到变量str。如果 OP 想要打印输出,只需将函数更改为 fprintf
      • @Dillon 抱歉,只是一个错字。很高兴你看到了。
      • @Dillon 许多人不看问题的答案已被接受。我认为最好让它开放,比如说一天,这样答案就可以获得更多的选票,发帖者的努力也可以获得更多的价值。..
      猜你喜欢
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多