2017-05-30 92 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)元素,做出比較,如果比較結果很好,否則就扔掉了,這很麻煩。我認爲會有另一種更有效的方法 –