多个样本同时插值时间序列数据
Interpolation of time series data with multiple samples at the same time
我正在尝试对我的时间序列数据进行插值,使其位于均匀间隔的时间线上,我正在使用以下代码
% interpolate the series
t = 0 : 3 : 400;
Series 1 = interp1(series 1(:,1),series 1(:,2),t,'linear');
但此错误消息不断出现,我不确定为什么
Error using griddedInterpolant
The grid vectors are not strictly monotonic increasing.
Error in interp1 (line 183)
F = griddedInterpolant(X,V,method);
这是部分时间序列的样子
series = [ 3.585, 0.21
5.135, 0.08
7.4, 0.19
11.125, -0.15
13.175, -0.27
16.045, -0.26
20.37, -0.12
25.24, 0.02
27.58, 0.05
30.38, 0.02
33.515 0.1];
您收到此错误是因为您的输入数据中显然有重复的时间。您将需要以某种方式处理这些重复项。一种方法是每次仅使用重复值的 first。您可以使用 unique
.
轻松完成此操作
[uniqueTimes, ind] = unique(series(:,1));
vals = series(ind, 2);
%// Values at which we want to interpolate
tt = linspace(min(uniqueTimes), max(uniqueTimes), 100);
%// Perform interpolation
newval = interp1(uniqueTimes, vals, tt, 'linear');
如果您希望对同一采样时间的所有值进行平均,则可以结合使用 unique
和 accumarray
来为您完成此操作。
%// Average all values that have the same time
[uniqueTimes, ~, inds] = unique(series(:,1));
vals = accumarray(inds, series(:,2), [], @mean);
%// Values at which we want to inteprolate
tt = linspace(min(uniqueTimes), max(uniqueTimes), 100);
%// Perform interpolation
newval = interp1(uniqueTimes, vals, tt, 'linear');
我正在尝试对我的时间序列数据进行插值,使其位于均匀间隔的时间线上,我正在使用以下代码
% interpolate the series
t = 0 : 3 : 400;
Series 1 = interp1(series 1(:,1),series 1(:,2),t,'linear');
但此错误消息不断出现,我不确定为什么
Error using griddedInterpolant
The grid vectors are not strictly monotonic increasing.Error in interp1 (line 183)
F = griddedInterpolant(X,V,method);
这是部分时间序列的样子
series = [ 3.585, 0.21
5.135, 0.08
7.4, 0.19
11.125, -0.15
13.175, -0.27
16.045, -0.26
20.37, -0.12
25.24, 0.02
27.58, 0.05
30.38, 0.02
33.515 0.1];
您收到此错误是因为您的输入数据中显然有重复的时间。您将需要以某种方式处理这些重复项。一种方法是每次仅使用重复值的 first。您可以使用 unique
.
[uniqueTimes, ind] = unique(series(:,1));
vals = series(ind, 2);
%// Values at which we want to interpolate
tt = linspace(min(uniqueTimes), max(uniqueTimes), 100);
%// Perform interpolation
newval = interp1(uniqueTimes, vals, tt, 'linear');
如果您希望对同一采样时间的所有值进行平均,则可以结合使用 unique
和 accumarray
来为您完成此操作。
%// Average all values that have the same time
[uniqueTimes, ~, inds] = unique(series(:,1));
vals = accumarray(inds, series(:,2), [], @mean);
%// Values at which we want to inteprolate
tt = linspace(min(uniqueTimes), max(uniqueTimes), 100);
%// Perform interpolation
newval = interp1(uniqueTimes, vals, tt, 'linear');