retime関数使用時の timetable/retime (line 140)エラーの解決方法について
4 ビュー (過去 30 日間)
古いコメントを表示
私は、現在大学の研究で記録間隔が一定でないデータを、既定の時間ごとに補完する作業を行っています。
その途中、私1人では解決できない問題が発生したため、担当教授の許可を得て、この場で質問させていただきます。
以下の図の通りに入力して1秒ごとのデータを出力しようとしました。
その結果次のような文面が表示されました。
Error using timetable/retime (line 140)
Input timetables must contain sorted (increasing or decreasing) row times when synchronizing using 'linear'.
この場合、1秒ごとのデータを出力するには、どうすればよいのでしょうか。
最後に、今回使用したコードを下に記載します。
Intensity = []';
Time = seconds([])';
TT1 = timetable(Time ,Intensity)
TT2 = retime(TT1,'regular','linear','SampleRate',1)
回答、よろしくお願いいたします。
0 件のコメント
採用された回答
Atsushi Ueno
2024 年 10 月 2 日
エラーメッセージの通り「記録間隔が単調増加ではない(並べ替えられていない)」事がエラーの原因です。
retime 関数の文書に「入力 timetable には、並べ替えられた一意の行時間がなければなりません」と記載されています。
実験1:「一意でない行時間」を入力すると下記のエラーが出ます
Input timetables must contain unique row times when synchronizing using 'linear'.
実験2:「並べ替えられていない行時間」を入力すると下記のエラーが出ます
Input timetables must contain sorted (increasing or decreasing) row times when synchronizing using 'linear'.
Time = seconds([0 0.2 0.4 0.7 0.9 1.1 1.3 1.6 1.8 2.0 2.2 2.5 2.7 2.9 3.1 3.4 3.6 ...
3.8 4.0 4.2 4.5 4.7 4.9 5.1 5.4 5.6 5.8 6.1 6.3 6.5 6.8 7.0 7.2 7.4 7.7]'); % 単調増加
TT1 = timetable(Time,rand(size(Time))); % Intensityは関係無いので適当な乱数
TT2 = retime(TT1,'regular','linear','SampleRate',1); % エラー無し
% 実験1:一意でない行時間を入力する
TT1.Time(11) = TT1.Time(10); % 10番目と11番目のデータを同じ(一意でない状態)にする
all(size(unique(TT1.Time)) == size(TT1.Time)) % 一意なら1、そうでなければ0
TT2 = retime(TT1,'regular','linear','SampleRate',1); % エラーが出る
%% 実験2:並べ替えられていない行時間を入力する
TT1.Time(10) = seconds(7.0); % 10番目の時間だけぴょこーんと飛び出す状態にする
issorted(TT1.Time) % 単調増加なら1、そうでなければ0
TT2 = retime(TT1,'regular','linear','SampleRate',1); % エラーが出る
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で ビッグ データの処理 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!