1
我会直接跳到一个最小的例子,因为我觉得很难把它放在单词中。我下面举个例子:基于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)];
我想要做的就是添加一个标志,数据结构(比如1)如果Data.Startdate和Data.Enddate之间的任何时间落在Event_start和Event_end之间。在上面的例子中,Data.Flag的值为1 0 0 1,因为从Event_start和Event_end向量可以看到1月1日和1月4日有事件发生。这个想法是我将使用这个标志来进一步处理数据。
我相信这很简单,但希望您能给予的帮助。
感谢您的回答,但什么嗨如果Event_start和Data.Startdate有不同的尺寸是多少?对于在我原来的帖子中没有澄清这一点抱歉。 – user1912925
@ user1912925:只要两者都是行向量,我的代码就不会在意(因为你的例子有不同数量的事件和日期,我甚至可以测试它)。 'bsxfun'行将所有开始/结束进行比较,创建两个nEvents-by-mDates数组以供进一步处理。 – Jonas
奇怪我得到bsxfun错误“两个输入数组的非单独维度必须相互匹配”(在我的“真实案例”中Data.Startdate是1 x 863,Event_start是340 x 1或1 x 340转换后就像你在例子中做的那样)。我可以看到我的真实案例和上面的最小示例之间没有其他区别,它确实可以使用您的解决方案。 – user1912925