こんにちは!!ようこそ、当ブログgcbgardenへ。管理人のsakurabaaa(@sakurabaaa_g)です。
本記事では、「Timeモジュール」を使ってPythonの実行(本記事では演算処理)にかかる時間を測定する方法を紹介します。そして、NumPyの強力さを証明します!!
感覚としてはストップウォッチのスタートとストップのようなイメージです。
数値計算ライブラリ NumPy とfor文でコーディングした場合では、天と地ほどの差が生じました。
Timeモジュールで実行時間を計測
まずは、実行環境についてです。
環境
- Python3
- Jupyter Notebook
- NumPy
※本プログラムは、数値計算ライブラリや描画ライブラリなどが豊富なJupyter Notebookを使ってコードを実行しています。いますぐ結果をみてみたい方は「Jupyter Notebook」にアクセスし、「Try it in your browser」で実践してみてください。
いまの時間を表示
まずはTimeモジュールでいまの時間の結果を得る方法です。
<< 実行結果 >>
time.ctime()
コマンドではいまその瞬間の時間を得ることができます。
NumPyとfor文で実行時間の比較
ここでは機械学習やデータサイエンスでよく使われる数値計算ライブラリNumPyを用いて、NumPyの強力さを示します。
time.time()
コマンドを使って実行時間を計測します。
以下、time.time()について。
エポックからの秒数を浮動小数点数で返します。 エポックの具体的な日付とうるう秒 (leap seconds) の扱いはプラットフォーム依存です。Windowsとほとんどの Unix システムでは、エポックは (UTC で) 1970 年 1 月 1 日 0 時 0 分 0 秒で、うるう秒はエポック秒の時間の勘定には入りません。 これは一般に Unix 時間 と呼ばれています。 与えられたプラットフォームでエポックが何なのかを知るには、 time.gmtime(0) の値を見てください。
時刻は常に浮動小数点数で返されますが、すべてのシステムが 1 秒より高い精度で時刻を提供するとは限らないので注意してください。 この関数が返す値は通常減少していくことはありませんが、この関数を 2 回呼び出し、その呼び出しの間にシステムクロックの時刻を巻き戻して設定した場合には、以前の呼び出しよりも低い値が返ることがあります。
time() が返す数値は、 gmtime() 関数に渡されて UTC の、あるいは localtime() 関数に渡されて現地時間の、より一般的な時間のフォーマット (つまり、年、月、日、時間など) に変換されているかもしれません。 どちらの場合でも struct_time オブジェクトが返され、このオブジェクトの属性としてカレンダー日付の構成要素へアクセスできます。
基本形
以下のコードをみて見るとストップウォッチのようにみえるはずです。
では、実際に測定してみた結果を紹介します。
本実験では、百万個の乱数を生成して、NumPyのdot()関数とPython組み込みのfor文で演算処理の実行時間の差を計測します。
よーい、どんっ!!
ストップですよ!!
<< 実行結果 >>
かかった時間(NumPy):0.001367807388305664秒
計算結果:249587.7019892569
かかった時間(for文):0.7771799564361572秒
・かかった時間(NumPy):0.001秒
・かかった時間(for文):0.777秒
計算結果は丸めてしまえばほぼ誤差はないものとし、ライブラリを使った場合とfor文とでは圧倒的に計算処理にかかる時間に差が出ていることが明らかにわかります。
実際には1秒で結果がでてしまいスピード差を感じることが難しいので、さらに計算スピードの違いを感じるために生成する乱数を100倍して、実行した結果が以下になります。
<< 実行結果 >>
かかった時間(NumPy):1.2797839641571045秒
計算結果:24997195.8086
かかった時間(for文):77.50342321395874秒
・かかった時間(NumPy):1.279秒
・かかった時間(for文):77.503秒
約77倍もの差が生じ、明らかに演算処理能力の違いが出ていることがわかると思います。
まとめ
結果からわかるように数値計算には効率化という観点からはNumPyを使って演算処理を行なった方がメリットが大きいことがわかりました。
この記事を書いた人。
20代。とあるネットベンチャーでがんばる働き屋さん、ブロガー。
書きたいことを気ままに書いてます!
Python、プログラミング、米株、カメラ、野球観戦がすき。趣味は新宿散策。