我想将我的时间向量(T1)及其相应的数据(Data1)更改为新的时间向量(T2),并在相应的数据(Data2)中包含Nan。 例如: -
T1 Data1
01-Sep-2007 00:00:30 0.01
01-Sep-2007 00:01:30 0.02
01-Sep-2007 00:02:30 0.03
01-Sep-2007 00:03:30 0.05
01-Sep-2007 00:04:29 0.08
01-Sep-2007 00:07:30 0.09
01-Sep-2007 00:09:29 0.05
我想将T1和Data1更改为新的矢量T2和Data2,我希望如下所示: -
T2 Data2
01-Sep-2007 00:00:00 0.01
01-Sep-2007 00:01:00 0.02
01-Sep-2007 00:02:00 0.03
01-Sep-2007 00:03:00 0.05
01-Sep-2007 00:04:00 0.08
01-Sep-2007 00:05:00 NaN
01-Sep-2007 00:06:00 NaN
01-Sep-2007 00:07:00 0.09
01-Sep-2007 00:08:00 NaN
01-Sep-2007 00:09:00 0.05
请有人可以帮我这个,因为我不知道一种方法可以做到这一点我MATLAB.Any帮助将不胜感激! 在此先感谢.. Shital
答案 0 :(得分:2)
我们假设您拥有t1
和data
>> t1, data1
t1 =
01-Sep-2007 00:00:30
01-Sep-2007 00:01:30
01-Sep-2007 00:02:30
01-Sep-2007 00:03:30
01-Sep-2007 00:04:29
01-Sep-2007 00:07:30
01-Sep-2007 00:09:29
data1 =
0.0100
0.0200
0.0300
0.0500
0.0800
0.0900
0.0500
首先,您要将t1
变为日期
>> t1 = datenum(t1);
然后将其四舍五入到上一分钟
>> dt = 1 / 24 / 60;
>> t1_rounded = floor(t1 / dt) * dt;
现在您可以创建t2
向量
>> t2 = (min(t1_rounded):dt:max(t1_rounded))';
并使用histc
命令的第二个输出来匹配索引 -
>> [~, index] = histc(t1, [t2; Inf]);
最终Inf
会抓住t2
向量末尾的任何内容。最后,您只需创建新的数据向量以充满NaN
s并分配给它。
>> data2 = NaN(size(t2));
>> data2(index) = data1;
所以你的结果是
>> datestr(t2), data2
ans =
01-Sep-2007 00:00:00
01-Sep-2007 00:01:00
01-Sep-2007 00:02:00
01-Sep-2007 00:03:00
01-Sep-2007 00:04:00
01-Sep-2007 00:05:00
01-Sep-2007 00:06:00
01-Sep-2007 00:07:00
01-Sep-2007 00:08:00
01-Sep-2007 00:09:00
data2 =
0.0100
0.0200
0.0300
0.0500
0.0800
NaN
NaN
0.0900
NaN
0.0500
答案 1 :(得分:0)
所以你的第一步是将T1
舍入到最近的30秒(可能是这样:round(T1/dt)*dt
,但这取决于你的数据)。然后你可以像这样生成T2
:
dt = 1/(2*60*24);
T2 = min(T1_rounded):dt:max(T1_rounded);
或者很可能
T2 = (T1_rounded(1):dt:T1_rounded(end))';
严格来说,此时您需要再次对T2
进行舍入,以避免在ismember
步骤中出现可能的(实际可能的)浮点算术错误...
T2 = round(T2/dt)*dt
现在将Data2
初始化为正确的尺寸但充满NaN
s:
Data2 = NaN(size(T2))
最后找到正确的索引:
ind = ismember(T2, T1_rounded)
并应用它们:
Data2(ind) = Data1