読者です 読者をやめる 読者になる 読者になる

データ・サイエンティストは可視化の夢を見るか?

Does Data Scientist Dream of Visualization?

作り直すべきときが来た

今晩和。
きょうは午前中、本業のほうをやっていたんですが、途中で独断で進むには問題のある局面に遭遇して、判断を仰ぐために中断してしまいました。


ですから、兼ねてからの懸案であったラボの仕事に着手しました。
TDD へと段階的に移行しよう、という話です。
ところが、これがまた伏魔殿で。
自分でソースコードを見直せば見直すほどアラが出てきます。


MATLAB での単体テストの導入は以下を参考にして。
qiita.com



まず、基本となる関数、最小限に絞って単体テストができるように実装し直しました。
組込関数のマニュアルを読んで、きちんとそれを実装し直す、という感じです。
ベースとなる計算をヴェクトル同士の内積に帰着できたので、組込関数よりおおよそ倍の速度で計算できるようになりました。
数値的にも、ある程度の tolerance であれば遜色ない計算結果です。

ちなみに同じ自作関数の for ループを parfor ループに書き換え “tic(); 〜〜; toc();” で実行時間を計測してみました。
並列計算させようとすると却って遅いんですね。
成る程、並列できるように、それだけメモリ上に領域を確保してデータを書き込み、そのうえで実際の計算をするのですから、裏目に出るケースもあるんですね。特にふつうの MBP が処理環境の場合。

とりあえず、きちんとお望みの計算結果が出せるようになったので安堵しました。
でも、話はそこで終わらない。


いま、わたしが取り扱っている話は「時間発展をともなう関数」なんですが、この基準となる時間の推移と、逐次与える 2 種の部分信号列の与え方を間違えると、最終結果に大きな問題が発生することが分かりました。
「なんと!?」という気分です。
何故なら、いま目指しているのは、この解析システムのリアルタイム動作であるからです。
ところがどうも、重要な正規化用パラメーターの算出方法を間違ってしまった。
ちゃんと初期時間に依存したかたちに書き直さねばならないのです。


いやあ、いろんなところにトラップがあるなあ、と。
今晩はもう寝て、明日に備えようかな?
おやつに強烈に濃いコーヒーを淹れて飲んだのを忘れているようです。 orz......