В настоящее время у меня есть две временные шкалы (timeline1 и timeline2), с совпадающими данными (data1 и data2).Временные шкалы почти, но не совсем совпадают (около 90% общих значений).
Я пытаюсь найти значения из данных data1 и data2, которые соответствуют одинаковым временным меткам (игнорируя все другие значения)Моя первая тривиальная реализация выглядит следующим образом (и, очевидно, ужасно медленной, учитывая, что мои временные шкалы содержат тысячи значений).Есть идеи как это улучшить?Я уверен, что есть разумный способ сделать это, избегая цикла for или операции поиска ...
% We expect the common timeline to contain
% 0 1 4 5 9
timeline1 = [0 1 4 5 7 8 9 10];
timeline2 = [0 1 2 4 5 6 9];
% Some bogus data
data1 = timeline1*10;
data2 = timeline2*20;
reconstructedData1 = data1;
reconstructedData2 = zeros(size(data1));
currentSearchPosition = 1;
for t = 1:length(timeline1)
% We only look beyond the previous matching location, to speed up find
matchingIndex = find(timeline2(currentSearchPosition:end) == timeline1(t), 1);
if isempty(matchingIndex)
reconstructedData1(t) = nan;
reconstructedData2(t) = nan;
else
reconstructedData2(t) = data2(matchingIndex+currentSearchPosition-1);
currentSearchPosition = currentSearchPosition+matchingIndex;
end
end
% Remove values from data1 for which no match was found in data2
reconstructedData1(isnan(reconstructedData1)) = [];
reconstructedData2(isnan(reconstructedData2)) = [];