はじめに
Pythonを使っているとint型とfloat型の計算などを何気無く書いていることがよくある。例えば
a = 1
b = 1.5
c = a + b
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'float'>
は、問題なく実行できる。これはPythonがc
を計算するときに、自動でa
をfloat型として扱ってくれているからである。
このように、Pythonのような変数などのデータ型の宣言を必要としない言語は動的型付け言語と呼ばれる。一方、Javaのような変数などのデータ型の宣言を必要とする言語は、静的型付け言語と呼ばれ、これらの言語的違いや歴史については、
を参照されたい。
本記事では、上のコードのようにa
を自動でfloat型として扱いc
を計算するときの、この自動にかかる処理速度を計測する。
処理速度の比較方法
それぞれ4種類の方法についてGoogle Colabを用いて1億回処理したときの平均処理時間を比較する。
実装したGoogle Colabのコードはこちらにあります。
%%timeit -r 1 -n 100000000
a = 1
b = 1.5
c = a + b
%%timeit -r 1 -n 100000000
a = 1.
b = 1.5
c = a + b
%%timeit -r 1 -n 100000000
a = float(1)
b = 1.5
c = a + b
%%timeit -r 1 -n 100000000
a = 1
b = 1.5
c = float(a) + b
結果
処理名 | 1億回の平均処理時間 (ns per loop) |
---|---|
処理1(aはint型で足す) | 83 |
処理2(aはfloat型で型を揃えて足す) | 57 |
処理3(aは組み込み関数でfloat型にして足す) | 142 |
処理4(aはcの計算時に組み込み関数でfloat型にして足す) | 146 |
やはり、a = 1
ではなくa = 1.
のようにfloat型で変数を書いた処理2が一番高速な結果となった。
面白いことに、処理3、4のように組み込み関数でfloat型にするのは時間がかかり、結果的に処理1のように自動で型合わせした方が速い結果となった。
まとめ
このように、型を適切に指定することで処理速度向上につながる。
また、自動で型を合わせてくれる機能は便利ではあるが、このような処理にも時間(負担)がかかるので、型を意識したコーディングはPythonにおいても重要なのかもしれない。
参考資料