我熟悉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')}));
当运行此代码时,我收到的错误基本上归结为上述问题,但我想坚持基本的例子。这应该清除为什么我不想只使用之前定义的变量 - 之前没有定义变量。
答案 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通常不允许您将索引操作链接到其他操作。所以我认为你必须首先将单元格数组分配给变量。