Arrays MATLAB sprintf从两个阵列开始

Arrays MATLAB sprintf从两个阵列开始,arrays,string,matlab,Arrays,String,Matlab,假设我有以下两个数组 x=[1 2 3 4 5 ]; y=[3 8 9 12 44]; 现在,我希望使用sprintf从它们创建一个字符串,该字符串将显示给我,如下所示: x1 = 3 x2 = 8 x3 = 9 x4 = 12 x5 = 44 但我无法让它正常工作。这就是我目前拥有的(我知道这可能是非常错误的,因为我一直在玩代码,在这个过程中可能会把它搞得更糟) 您可以将arrayfun用于cell数组作为输出- arrayfun(@(n) ['x' num2str(x(n)) ' = '

假设我有以下两个数组

x=[1 2 3 4 5 ];
y=[3 8 9 12 44];
现在,我希望使用sprintf从它们创建一个字符串,该字符串将显示给我,如下所示:

x1 = 3
x2 = 8
x3 = 9
x4 = 12
x5 = 44
但我无法让它正常工作。这就是我目前拥有的(我知道这可能是非常错误的,因为我一直在玩代码,在这个过程中可能会把它搞得更糟)


您可以将
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

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])

你几乎把它做好了。不需要for循环:

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

我认为有比这更简单的方法。你确定第二个解决方案是OP想要的吗?我运行了它,得到了
str=x=3…
等等。它的输出中有str这个词。@kkuilla-他的第二个只需要[x;y]而不是x,y。当它运行完美时:)@kkuilla我不确定你是怎么得到这个的,你应该再试一次。根据问题OP希望将字符串保存到变量
str
。如果OP想要打印输出,只需将函数更改为
fprintf
@Dillon对不起,只是输入错误。“很好,你看到了。”狄龙许多人看问题时都不会给出公认的答案。我认为最好让它开放一天,这样答案就可以获得更多的选票,海报也可以因为他们的努力而获得更多的价值。。
sprintf('x%d = %d\n',[x;y])