MATLAB的新手,我想采用两个向量year
和month
,并使用datenum()以matlab格式将它们放入一个date
向量中。我已经尝试过从文档中做到这一点,但我还不太清楚如何去做。我所拥有的是:
date = datenum(year, month);
这给了我一个错误,如果有人可以提供帮助,那将非常感激。
答案 0 :(得分:0)
datenum的输入应为string
或cell-array
,因此您可以执行以下操作:
year = [1989;1990];
month = [10;11];
input = cellstr(num2str([year,month]));
date = datenum (input,'yyyy mm')
请注意,您需要为日期字符串编写正确的解析格式。
date =
726742
727138
formatOut = 'mmmm-dd-yyyy';
datestr(date,formatOut,'local')
ans =
October -01-1989
November-01-1990
我认为您也可以在datenum
中输入数字输入,但我不确定它是否接受向量 - 我在办公室有2010b版本但它不起作用。
答案 1 :(得分:0)
没有必要像@ gameofthrows的回答那样将数字转换为字符串和返回 - 这些都是非常昂贵的操作。您可以使用未记录的mex函数datenummx
(如果您检查datenum
源,可以发现它):
year = [1989;1990];
month = [10;11];
day = ones(size(year));
datenums = datenummx(year, month, day);
这提供了令人印象深刻的 ~86x 加速(Matlab 2013b),超过了此处提出的其他解决方案:
>> tic; for i=1:1e6, datenums = datenummx(year, month, ones(size(year))); end; toc;
Elapsed time is 3.286964 seconds.
>> tic; for i=1:1e6, input = cellstr(num2str([year,month])); datenums = datenum (input,'yyyy mm'); end; toc;
Elapsed time is 283.356511 seconds.
这里可能应该有一个普遍的警告,即它可能会在未来的版本中突破,但这个功能已经存在了五年,并且性能优势显然超过了其他问题。