Ich habe derzeit zwei Zeitleisten (timeline1 und timeline2), mit passenden Daten (data1 und data2). Die Zeitleisten stimmen fast, aber nicht ganz überein (etwa 90 % der gemeinsamen Werte).
Ich versuche, Werte aus data1 und data2 zu finden, die identischen Zeitstempeln entsprechen (alle anderen Werte werden ignoriert)
Meine erste triviale Implementierung ist wie folgt (und ist offensichtlich furchtbar langsam, da meine Zeitleisten Tausende von Werten enthalten). Irgendwelche Ideen, wie man das verbessern kann? Ich bin sicher, es gibt einen intelligenten Weg, dies zu tun, während die for-Schleife oder die find-Operation zu vermeiden...
% 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)) = [];