Удаление повторяющихся значений из временных рядов в MATLAB - PullRequest
1 голос
/ 04 июня 2019

У меня есть временной ряд, который выглядит следующим образом:

Time    Data
-------------
802     1
803     2
803     3
804     7

Я хочу использовать interp(x,v,xq) с x в качестве времени и v в качестве данных, но эта функция требует, чтобы у меня были различные значения x.Как мне удалить / усреднить повторяющиеся строки во временных рядах MATLAB?

Я пытался interp(unique(timeseriesname.time), timeseriesname.data, timeseriesref.time)

Но это не соответствует моим данным.Есть ли простой способ сделать это?

1 Ответ

3 голосов
/ 04 июня 2019

Если вы просто хотите, чтобы интерполяция работала с данными как есть, вы можете попробовать метод resample для timeseries объектов. Конечно, для вашего данного примера он будет отображать разрыв в момент времени 803, но все равно будет работать без ошибок:

>> ts = timeseries([1 2 3 7].', [802 803 803 804]);
>> rs = resample(ts, 802:0.25:804);
>> [rs.time rs.data]

ans =

  802.0000    1.0000
  802.2500    1.2500
  802.5000    1.5000
  802.7500    1.7500
  803.0000    3.0000
  803.2500    4.0000
  803.5000    5.0000
  803.7500    6.0000
  804.0000    7.0000

Обратите внимание, что момент времени 803 имеет значение 3, но интерполанты приближаются к значению 2 снизу.

Если вы хотите просто удалить дубликаты записей путем их усреднения, вы можете использовать функции unique и accumarray для создания нового объекта timeseries, например так:

>> [newTime, ~, index] = unique(ts.time);
>> newTS = timeseries(accumarray(index, ts.data, [], @mean), newTime);
>> [newTS.time newTS.data]

ans =

  802.0000    1.0000
  803.0000    2.5000
  804.0000    7.0000

В качестве альтернативы, если вы хотите изменить время и данные оригинального timeseries объекта, вы можете установить их одновременно с помощью метода set:

[newTime, ~, index] = unique(ts.time);
newData = accumarray(index, ts.data, [], @mean);
set(ts, 'Time', newTime, 'Data', newData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...