根据matlab中的两个日期时间数组逻辑索引数据

Logically index Data based upon two date time arrays in matlab

我会直接跳到一个最小的例子,因为我发现这很难用语言表达。我有以下示例:

Data.Startdate=[datetime(2000,1,1,0,0,0) datetime(2000,1,2,0,0,0) datetime(2000,1,3,0,0,0) datetime(2000,1,4,0,0,0)];
Data.Enddate=[datetime(2000,1,1,24,0,0) datetime(2000,1,2,24,0,0) datetime(2000,1,3,24,0,0) datetime(2000,1,4,24,0,0)];
Data.Value=[0.5 0.1 0.2 0.4];
Event_start=[datetime(2000,1,1,12,20,0) datetime(2000,1,1,16,0,0) datetime(2000,1,4,8,0,0)];
Event_end=[datetime(2000,1,1,14,20,0) datetime(2000,1,1,23,0,0) datetime(2000,1,4,16,0,0)];

如果 Data.Startdate 和 Data.Enddate 之间的任何时间落在 Event_start 和 [=21= 之间,我想要做的是向数据结构添加一个标志(比如 1) ].在上面的示例中,Data.Flag 的值为 1 0 0 1,因为从 Event_start 和 Event_end 向量中您可以看到 1 月 1 日和 1 月 4 日有事件。我的想法是,我将使用此标志进一步处理数据。

我相信这很简单,但如果您能提供任何帮助,我们将不胜感激。

我会使用 datenum 将日期转换为数字,然后使用 bsxfun:

进行相当方便的比较
isStartBeforeEvent = bsxfun(@gt,datenum(Event_start)',datenum(Data.Startdate));
isEndAfterEvent = bsxfun(@lt,datenum(Event_end)',datenum(Data.Enddate));

flag = any(isStartBeforeEvent & isEndAfterEvent, 1)