タイムスタンプの 2 つのリストがあり、imu_ts を真の時間として使用し、それに最も近い vicon_ts 値を見つけようとするマップを作成しようとしています。出力は 3xd 行列で、最初の行は imu_ts インデックス、3 番目の行はそのインデックスでの UNIX 時間、2 番目の行は同じ列のタイムスタンプより上の最も近い 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) 操作ですが、ループしているため実行速度が遅くなります。同じことを行うベクトル化された方法はありますか?
編集 予想または最初に測定したよりも高速に実行されているように見えるため、これはもはや重大な問題ではありません。しかし、この問題に対する良い解決策があるかどうかを知りたいと思います。