【问题标题】:How can I get two date vectors into MATLAB format using datenum如何使用 datenum 将两个日期向量转换为 MATLAB 格式
【发布时间】:2016-05-17 14:51:27
【问题描述】:

MATLAB 新手,我想使用 datenum() 将两个向量 yearmonth 放入 matlab 格式的一个 date 向量中。我已经尝试从文档中执行此操作,但我仍然不太确定如何执行此操作。我所拥有的是:

date = datenum(year, month);

这给了我一个错误,如果有人可以提供帮助,将不胜感激。

【问题讨论】:

  • 请编辑您的问题以包含您收到的确切错误。

标签: matlab


【解决方案1】:

datenum 的输入应该是 stringcell-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 版本,但它不起作用。

【讨论】:

  • 在这种情况下,请接受这个答案作为正确答案:)
【解决方案2】:

无需像@gameofthrows 的回答那样将数字转换为字符串并返回 - 这些操作的成本非常高。您可以使用未记录的 mex 函数 datenummx(如果您检查 datenum 源,您可以发现):

year = [1989;1990];
month = [10;11];

day = ones(size(year));
datenums = datenummx(year, month, day);

与此处提出的其他解决方案相比,这提供了令人印象深刻的 ~86 倍 加速(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.

这里应该有一个普遍的警告,它可能会在未来的版本中中断,但这个功能已经存在了五年,而且性能优势明显超过了其他问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2014-02-25
    • 2021-11-11
    相关资源
    最近更新 更多