怪异的单元格行为

时间:2013-09-17 16:19:24

标签: matlab

我熟悉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')}));    

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

1 个答案:

答案 0 :(得分: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通常不允许您将索引操作链接到其他操作。所以我认为你必须首先将单元格数组分配给变量。