两个数组的MATLAB sprintf

时间:2015-02-17 09:29:15

标签: 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

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

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

3 个答案:

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