2017-05-30 90 views
1

我有一个nx3单元阵列,其中start time,end time列和place列与此案不相关,但必须保留以备后用。每一行都有一个事件。时间在几秒钟内。我想创建一个功能时代过滤器,以便:单元阵列中大于阈值非重叠时间MATLAB

end_time(i) + threshold < start_time(i+1) for any given i within the array

如果这些条件不能满足从start_time(i) to end_time(i+n),事件应该是“合并”因为end_time(i+n) + threshold < start_time(i + n + 1)。也就是说,新的开始时间应该是start_time(i),新的结束时间应该是end_time(i +n),符合条件。所有其他行应该被删除。

我一直在思考一个有效的方式做到这一点,但我发现自己失去了

的例子小区比

A = 

[17.9174] [17.9386] 'NYC' 
[20.3504] [20.3628] 'NYC' 
[26.7564] [26.7804] 'NYC' 
[26.7956] [26.8016] 'NYC' 
[26.8017] [26.9000] 'NYC' 
[27.7117] [27.8000] 'NYC' 

的门槛0.2所需的输出应该是

A =

[17.9174] [17.9386] 'NYC' 
[20.3504] [20.3628] 'NYC' 
[26.7564] [26.9000] 'NYC' 
[27.7117] [27.8000] 'NYC' 
+0

我想你的意思是在你的例子中的阈值0.02? –

+0

我还没有看到你的解决方案和你迷路的地方。但我会尽力向你提问。 –

回答

0

for loop with break一定会解决你的问题。我建议你从那里开始。这通常是最快的方法,也有助于验证您的方法。

Matlab确实为这类问题提供了一些方便的功能,并利用其着名的矢量化效率优雅地编写代码。如果你不熟悉他们,我要说的阅读文档以下功能

diffcell2mat>

建议的做法是那么

  1. 先取2列你的单元格数组并将其转换为数字数组形式。提示:cell2mat
  2. 计算两列之间的差异。提示:diff(附加参数)。
  3. 查找满足您的条件的索引,结果为2中的向量。提示:>或您喜欢在此处使用的任何逻辑比较运算符。
  4. 基础上产生3.提示逻辑索引创建一个新的单元阵列:Logical indexing

肯定的回答可以是一个衬垫,但是这不是我们应该关心。在Matlab中快乐的解决问题和编码。

+0

问题是如何从2个不同的行和列中制作差异使用数据。我不想'diff(cell2mat(A(:1:2)),1,2)',这是每个事件的持续时间。我想看看从一个事件结束到另一个事件的开始时间是否少于0.2个阈值。我迷失了,因为写一个for循环来处理(i,2)和(iith + 1,1)元素,做出比较,如果比较结果很好,否则就扔掉了,这很麻烦。我认为会有另一种更有效的方法 –