根据其他向量中的值识别向量中的元素

时间:2018-06-29 22:54:11

标签: matlab indexing

我有8个事件的时间发作,分别是 event1 event2 event3 ,..., event8 (这些事件均不能同时发生,因此每次发作都是唯一的)。每个事件为 n x 1 double (n个事件之间可能会有所不同),如下所示:

event1 = [29.7; 38.4; 65.6; 149.6; 369.3]  
event2 = [10.1; 11.8; 38.1; 142.2]
event3 = [5.5; 187.1; 200.1; 202.8; 236.7]  
event4 = [15.3; 29.2; 54.5; 87.6; 100.4; 105.8; 120.9; 122.4]  
...  
event8 = [38.2; 66.7; 89.7; 100.5; 105.2; 168.9]

我想在 event1 中找到紧接在 event2 中的时间点或 event4 中的时间点之前的时间点,表示在这之间没有其他事件的另一个时间点。例如,事件1中的第一个时间点(即29.7)符合此条件,因为它先于事件4 中的第二个时间点(即29.2)。同样,事件1 的时间点4之前是事件2 的时间点4。相反, event1 中的第二个时间点(即38.4)不符合条件,因为它先于 event8 中的第一个时间点(即38.2)。

结果应为event1的索引,例如:index = [1;4]

有人可以帮助我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

MATLAB的内置函数可能提供了一种更简洁的解决方案,但我认为以下一个简单易行。

event1 = [29.7; 38.4; 65.6; 149.6; 369.3];  
event2 = [10.1; 11.8; 38.1; 142.2];
event3 = [5.5; 187.1; 200.1; 202.8; 236.7];  
event4 = [15.3; 29.2; 54.5; 87.6; 100.4; 105.8; 120.9; 122.4];  
event8 = [38.2; 66.7; 89.7; 100.5; 105.2; 168.9];


event_agg = [event1; event2; event3; event4; event8]; % events vector, aggregate 
eve_numb = [ones(length(event1),1); % event number vector
            2*ones(length(event2),1);
            3*ones(length(event3),1);
            4*ones(length(event4),1);
            8*ones(length(event8),1)];

EVENTS_IND = [event_agg, eve_numb]; % aggregate events with indices

EVENTS_SORT = sortrows(EVENTS_IND); % agg. events w/indices, sorted by event times

hits_array = []; % store the event times that meet the specified condition
for iter = 2:length(EVENTS_SORT)
    if EVENTS_SORT(iter,2) == 1 % if the event time at iter comes from event #1
        if EVENTS_SORT(iter-1,2) == 2 || EVENTS_SORT(iter-1,2) == 4 % if the event time at iter-1 come from events #2 or #4
            hits_array = [hits_array EVENTS_SORT(iter,1)];
        end
    end
end