说我有以下两个数组
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
答案 0 :(得分:4)
你几乎做对了。不需要for循环:
sprintf('x%d = %d\n',[x;y])
答案 1 :(得分:3)
您可以将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
答案 2 :(得分:3)
sprintf
函数没有您期望的向量行为。该函数实际上查看每个元素。请注意,说明符%d是int而不是向量。这意味着,对于您的函数调用,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])