2016-09-09 21 views
0

MATLABにBodyDataというセル配列があります。この配列には、約139列と骨格追跡データの3500個の奇数行があります。 という2つの文字列値(イベントが発生したときのタイムスタンプ)間のすべての行を抽出する必要があります。MATLABしきい値を持つ2つの変数間のすべての行を抽出します

BodyData{}= 
Column 1    2  3 
'10:15:15.332' 'BASE05' ... 
... 
'10:17:33:230' 'BASE05' ... 

2つのタイムスタンプは、アレイ内の値と一致する必要がなく、アレイ内のそれらの数ミリ秒以内であるかもしれない例えば

TimeStamp1 = '10:15:15.560' 
TimeStamp2 = '10:17:33.233' 

私はいくつか質問があります。

2つの文字列の値の間にあるすべてのデータに対して、.100msという小さいしきい値をプラスまたはマイナスして配列を返すにはどうすればよいですか?

また、column2のすべてのstr値も同じでなければならないという条件を追加することもできます。それ以外の場合は無視しますか?たとえば、唯一の「BASE02」

多くのおかげで、あなたの問題の最初の部分に

答えて

1

最善のアプローチは、数値、日付値に文字列から変更することはおそらくある場合にのみ、AとBの間のタイムスタンプを返します。 Matlabではこれはdatenumで非常に苦労せずに行うことができます。

2番目の部分では、論理インデックスを使用することができます。これは、インデックス作成式内に条件(つまり、2番目の列がBASE02)を入れたかどうかです。

自己完結型の例:

% some example data: 
BodyData = {'10:15:15.332', 'BASE05', 'foo';... 
      '10:15:16.332', 'BASE02', 'bar';... 
      '10:15:17.332', 'BASE05', 'foo';... 
      '10:15:18.332', 'BASE02', 'foo';... 
      '10:15:19.332', 'BASE05', 'bar'}; 

% create column vector of numeric times, and define start/end times 
dateValues = datenum(BodyData(:, 1), 'HH:MM:SS.FFF'); 
startTime = datenum('10:15:16.100', 'HH:MM:SS.FFF'); 
endTime = datenum('10:15:18.500', 'HH:MM:SS.FFF'); 

% select data in range, and where second column is 'BASE02' 
BodyData(dateValues > startTime & dateValues < endTime & strcmp(BodyData(:, 2), 'BASE02'), :) 

戻り値:

ans = 
'10:15:16.332' 'BASE02' 'bar' 
'10:15:18.332' 'BASE02' 'foo' 

参考文献:datenum manual pagematlab help page on logical indexing

関連する問題