python高速化、シュミレーションに対して

pythonでシュミレーションを書いているので、高速化のために行ったことをまとめる。

知らないことはできないので、やれた範囲で。

 

1 ファイルの読み書き。

一度オープンしたファイルに書き込み続けていると途中で途切れてしまうのを防ぐためにopen > 一行書き込み > closeを繰り返していたが、流石に遅い。

文字列としてまとめる > open > 複数行(一粒ごと) > close なら途切れることなく書き込みが終わった。

もっと長めにとって書き込んだほうが早くなるのかもしれないが、そこの検証は諦めた。

 

2 2次元データの保持について

今回は、ポテンシャル曲面においてボールを転がすようなシミュレーションを行うので、ポテンシャル局面の配列にランダムアクセスする必要がある。

np.arrayに対するランダムアクセスは異様に遅いが、listも大差ないだろうと踏んでいたが、塵が積もった結果山になったのでlist管理に変更。

かなり早くなった。行列演算でできないこともないと思われるが、手間がかかるため断念。

 

3 オーバーヘッド

一部の関数を組み込むことで早くなったが、全てを組み込むと早くなるわけでもなかった。むしろ計算が狂い始めたのでほどほどに調整した。

 

4 メモリエラー

pythonが管理できるメモリには多分上限があるので、適宜破壊的代入を行うことでメモリを開放する必要がある。

使ったら0を代入している