MATLAB中从不同格式时间向量提取时间点并生成标记向量
解决MATLAB时间向量匹配与区间标记问题
嘿,我来帮你搞定这个时间向量的匹配和标记任务!核心思路是先把两种不同格式的时间统一转换成可比较的datetime类型,或者提取一致的时间字符串片段来匹配,这样就能轻松定位索引并生成目标向量V3了。下面是具体的实现步骤:
方法一:统一转换为datetime类型(推荐)
这种方法最可靠,因为MATLAB的datetime类型能直接处理时间比较,避免字符串格式的各种坑:
将V1转换为datetime对象
首先把V1的完整日期时间字符串转成MATLAB可识别的datetime:% 示例V1数据(包含目标时间点) V1 = ['02-Feb-2018 08:23:42' '02-Feb-2018 08:24:42' '02-Feb-2018 08:35:42' '02-Feb-2018 09:01:42']; V1_datetime = datetime(V1, 'InputFormat', 'dd-MMM-yyyy HH:mm:ss');将t0和tend转换为同日期的datetime对象
V2的时间都是和V1同一天的,所以给t0和tend补上日期,再转换为datetime(记得去掉V2时间里的前导空格):t0 = ' 8:35 AM'; tend = ' 9:01 AM'; % 补上日期并转换格式,strtrim处理前导空格 t0_datetime = datetime(['02-Feb-2018 ' strtrim(t0)], 'InputFormat', 'dd-MMM-yyyy hh:mm a'); tend_datetime = datetime(['02-Feb-2018 ' strtrim(tend)], 'InputFormat', 'dd-MMM-yyyy hh:mm a');定位起始和结束索引
用find函数找到V1中匹配t0和tend的第一个索引:idx_start = find(V1_datetime == t0_datetime, 1); idx_end = find(V1_datetime == tend_datetime, 1);生成目标向量V3
初始化全0向量,然后把区间内的值设为1(加个判断避免索引为空的情况):V3 = zeros(size(V1)); if ~isempty(idx_start) && ~isempty(idx_end) V3(idx_start:idx_end) = 1; end
方法二:提取时间片段进行字符串匹配
如果V1和V2的时间仅在秒数上有差异(比如V1带秒数,V2没有),可以提取V1的时分+AM/PM部分,和V2的时间直接对比:
% 提取V1的时间部分(不带秒和日期) V1_timeonly = datestr(V1_datetime, 'hh:mm a'); % 去掉空格后匹配字符串 idx_start = find(strcmp(strtrim(V1_timeonly), strtrim(t0)), 1); idx_end = find(strcmp(strtrim(V1_timeonly), strtrim(tend)), 1); % 生成V3的步骤和方法一一致
注意:如果V1中没有完全匹配t0或tend的时间点,find会返回空,这时候可以根据需求调整逻辑(比如找最接近的时间点)。
内容的提问来源于stack exchange,提问作者Sowmya Madras Rajesh
相关产品推荐
相关产品推荐

