Имам два списъка с времеви марки и се опитвам да създам карта между тях, която използва imu_ts като истинско време и се опитва да намери най-близката стойност на vicon_ts до него. Резултатът е 3xd матрица, където първият ред е индексът imu_ts, третият ред е unix времето при този индекс, а вторият ред е индексът на най-близката стойност на vicon_ts над клеймото за време в същата колона.
Ето моят код досега и той работи, но е наистина бавен. Не съм сигурен как да го векторизирам.
function tmap = sync_times(imu_ts, vicon_ts)
tstart = max(vicon_ts(1), imu_ts(1));
tstop = min(vicon_ts(end), imu_ts(end));
%trim imu data to
tmap(1,:) = find(imu_ts >= tstart & imu_ts <= tstop);
tmap(3,:) = imu_ts(tmap(1,:));%Use imu_ts as ground truth
%Find nearest indecies in vicon data and map
vic_t = 1;
for i = 1:size(tmap,2)
%
while(vicon_ts(vic_t) < tmap(3,i))
vic_t = vic_t + 1;
end
tmap(2,i) = vic_t;
end
Времевите клейма вече са сортирани във възходящ ред, така че това по същество е O(n) операция, но тъй като е зациклена, тя работи бавно. Някакви векторизирани начини да направите същото?
Редактиране Изглежда, че работи по-бързо, отколкото очаквах или първоначално измерено, така че това вече не е критичен проблем. Но ще ми е интересно да видя дали има някакви добри решения на този проблем.