我在MATLAB中有一个名为BodyData的单元数组,它有大约139列和3500多行骨架跟踪数据。 我需要提取两个字符串值之间的所有行(这些是事件发生时的时间戳) e.g。
BodyData{}=
Column 1 2 3
'10:15:15.332' 'BASE05' ...
...
'10:17:33:230' 'BASE05' ...
两个时间戳应该与数组中的值匹配,但也可能在数组中的那些时间的几毫秒内,例如
TimeStamp1 = '10:15:15.560'
TimeStamp2 = '10:17:33.233'
我有几个问题!
如何为两个字符串值之间的所有数据返回一个数组加上或减去一个小的阈值,比如说.100ms?
我还可以添加另一个条件来说明column2中的所有str值也必须相同,否则忽略?例如,仅在“BASE02”
时才返回A和B之间的时间戳非常感谢,
答案 0 :(得分:1)
问题第一部分的最佳方法可能是从字符串更改为数字日期值。在Matlab中,这可以通过datenum
轻松完成。
对于第二部分,您可以使用逻辑索引...这是您在索引表达式中放置条件(即第二列是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 page,matlab help page on logical indexing。