3

我熟悉python,但这只是我使用matlab的第二天。

我明白那个

a = {1 2 3}
fprintf('%i %i %i', a{1:3})

产量

1 2 3

但是怎么会

a = {1 2 3}
fprintf('%i %i %i', a)

给出错误?

我真的很想

fprintf('%i %i %i', {1 2 3}{1:3})

屈服

1 2 3

换句话说,如果我有一个元胞数组,如何在不将元胞数组分配给变量的情况下使用 fprintf 打印每个元素?

任何建议表示赞赏。

编辑:详细说明:我设置了一个挑战来接收用户输入以获取实验名称、当前日期和结束日期(实验的),然后输出所有这些信息以及距离实验结束。我只想用一行代码来做到这一点。我的代码如下。

fprintf(strcat(...
'\nTest: %s',...
'\nCurrent Date: %s',...
'\nEnd Date: %s',...
'\nNumber of days until completion: %i\n'...
),input('\nTest name?\n','s'),...
feval(@(dates){dates{1},dates{2},diff(datenum(dates,'mm-dd-yyyy'))},...
{input('\nCurrent Date? (mm-dd-yyyy)\n','s')...
input('\nEnd Date? (mm-dd-yyyy)\n','s')}));    

运行此代码时,我收到一个基本上归结为上述问题的错误,但我想坚持基本示例。这应该清楚为什么我不想只使用先前定义的变量 - 没有先前定义的变量。

4

1 回答 1

1

元胞数组只是另一种数据类型,因此当您输入

a = {1 2 3}
fprintf('%i %i %i', a)

fprintf 函数只看到单个变量 'a' 并知道元胞数组与 fprintf 不兼容。

但是,当您使用大括号 {} 对元胞数组进行索引时,matlab 会返回一个“逗号分隔列表”,它可以直接输入到函数中,就像您手动写出这些值一样。所以

fprintf('%i %i %i', a{1:3})

被解释为

fprintf('%i %i %i', 1, 2, 3)

对于您的第二个问题,您发现 Matlab 通常不允许您将索引操作链接到其他操作。所以我认为你必须首先将单元格数组分配给一个变量。

于 2013-09-17T16:36:20.197 回答