7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

動的型付け言語Pythonの型合わせの処理速度

Last updated at Posted at 2022-04-24

はじめに

Pythonを使っているとint型とfloat型の計算などを何気無く書いていることがよくある。例えば

Python
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のコードはこちらにあります。

処理1(aはint型で足す)
%%timeit -r 1 -n 100000000
a = 1
b = 1.5
c = a + b
処理2(aはfloat型で型を揃えて足す)
%%timeit -r 1 -n 100000000
a = 1.
b = 1.5
c = a + b
処理3(aは組み込み関数でfloat型にして足す)
%%timeit -r 1 -n 100000000
a = float(1)
b = 1.5
c = a + b
処理4(aはcの計算時に組み込み関数でfloat型にして足す)
%%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においても重要なのかもしれない。

参考資料

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?