如何在MATLAB中从meshgrid创建一个字符串单元?

3

我有一个库函数,它接受文本字符串作为参数(它是一个带有MATLAB前端的通用C库)。我想这样调用它:

'-a 0 -b 1'
'-a 0 -b 2'
'-a 0 -b 3'
'-a 1 -b 1'
'-a 1 -b 2'
'-a 1 -b 3'

我正在使用 meshgrid 创建变量 ab 的值:

[a,b] = meshgrid(0:5, 1:3);

这将产生:

a =

 0     1     2     3     4     5
 0     1     2     3     4     5
 0     1     2     3     4     5

b =

 1     1     1     1     1     1
 2     2     2     2     2     2
 3     3     3     3     3     3

现在我想把这些字符串放到一个单元格中:

params = {'-a 0 -b 1'; '-a 0 -b 2'; 等等...}

我尝试使用 sprintf,但那只是把它们连接起来。

sprintf('-a %f -b %f', a ,b)

ans =

-a 0.000000 -b 0.000000-a 0.000000 -b 1.000000-a 1.000000 -b 1.000000-a 2.000000 -b 2.000000-a 2.000000 -b 3.000000-a 3.000000 -b 3.000000-a 4.000000 -b 4.000000-a 4.000000 -b 5.000000-a 5.000000 -b 5.000000-a 1.000000 -b 2.000000-a 3.000000 -b 1.000000-a 2.000000 -b 3.000000-a 1.000000 -b 2.000000-a 3.000000 -b 1.000000-a 2.000000 -b 3.000000-a 1.000000 -b 2.000000-a 3.000000 -b 1.000000-a 2.000000 -b 3.000000

除了循环遍历 ab,我该如何创建所需的单元格?
2个回答

3
你可以尝试使用INT2STR和STRCAT函数来实现,具体操作如下:

INT2STR函数将数字转换为字符串,STRCAT函数将两个字符串连接起来。

params = strcat({'-a '},int2str(a(:)),{' -b '},int2str(b(:)));

2
一种稍微简单的解决方案:
strcat(num2str([a(:) b(:)],'-a %d -b %d'), {})

我认为NUM2STR将按列顺序从矩阵[a(:) b(:)]中提取值,因此您可能需要先转置该矩阵。您也可以使用CELLSTR而不是STRCAT。 - gnovice
2
你确定 NUM2STR 是正确的吗?做个简单的测试:使用 num2str([1 2; 3 4; 5 6],'%d\n') 或者 num2str([1 2; 3 4; 5 6],'%d %d') 来匹配上面的内容。 - Amro
2
这与FPRINTF/SPRINTF的行为不同,因此我可以理解为什么有人会这样想。(与sprintf('%d\n',[1 2; 3 4; 5 6])进行比较) - Amro
我认为混淆的原因在于 NUM2STR 的文档链接到 FPRINTF 来描述格式部分的工作方式。他们可能应该让这种差异更加清晰明了。 - gnovice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接