我有一个包含时间数据的数据文件。100,000+指出,这个列表相当长。每0.1秒有一次数据,时间戳是这样的:
'2010-10-10 12:34:56‘
'2010-10-10 12:34:56.1‘
'2010-10-10 12:34:56.2‘
'2010-10-10 12:34:53.3‘
等。
不一定每隔0.1秒出现一次。我需要检查是否缺少0.1秒的间隔,然后将缺少的时间插入到日期向量中。比较字符串似乎不必要地复杂。我试着比较从午夜开始的秒数:
date_nums=datevec(time_stamps);
secs_since_midnight=date_nums(:,4)*3600+date_nums(:,5)*60+date_nums(:,6);
comparison_secs=linspace(0,86400,864000);
res=(ismember(comparison_secs,secs_since_midnight)~=1);
然而,由于舍入误差,这种方法不起作用。从午夜开始的秒数和比较它的秒数的线性空间都不完全相等(由于十分之一秒的分辨率?)。这样做的目的是稍后对与时间戳关联的数据进行fft,因此我希望尽可能多的统一数据(与丢失间隔关联的数据将被插值)。我已经考虑过把它分成更小的时间块,一次只检查一个小块,但我不知道这是不是最好的方法。谢谢!
发布于 2011-03-08 21:34:08
将秒数乘以10,并四舍五入为最接近的整数,然后再与范围进行比较。
要做到这一点,可能有比ismember
更有效的方法。(我不知道ismember
的实现有多聪明,但如果它是可能工作的最简单的事情,那么您将以这种方式花费O(N^2)时间。)例如,您可以使用实际存在的时间戳(作为0.1秒间隔的整数)作为数组的索引。
https://stackoverflow.com/questions/5238507
复制