在单元数组MATLAB中大于阈值非重叠时间

时间:2017-05-30 01:08:56

标签: arrays matlab for-loop vectorization

我有一个nx3单元格数组,其中包含start timeend time的事件和place列与此案例无关,但必须保留以供日后使用。每行都有一个事件。时间是几秒钟。我想创建一个过滤时间的函数,以便:

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' 。应删除所有其他行。

我一直在考虑一种有效的方法,但我发现自己失去了

示例单元格位于

之下
[17.9174]    [17.9386]    'NYC'
[20.3504]    [20.3628]    'NYC'
[26.7564]    [26.9000]    'NYC'
[27.7117]    [27.8000]    'NYC'

阈值0.2的期望输出应为

A =

aws ecr get-login --region YOUR_REGION --no-include-email | xargs -n 1 -P 10 -I {} bash -c {}

1 个答案:

答案 0 :(得分:0)

for

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

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

diffcell2mat>

然后提出的方法

  1. 取出单元格数组中的前两列,并将其转换为数字数组形式。提示:cell2mat
  2. 计算两列之间的差异。提示:diff(附加参数)。
  3. 在2中的结果向量中找到满足条件的索引。提示:>或您想在此处使用的任何逻辑比较运算符。
  4. 根据逻辑索引创建一个新的单元格数组,结果为3.提示:Logical indexing
  5. 当然答案可以是一个班轮,但这不是我们应该关注的问题。在Matlab中快乐解决问题和编码。