Python mathモジュールとNumpyモジュールの関数計算の方法および違い

関数計算をPythonで行う場合、mathモジュールをインポートして実行する場合とNumpyモジュールをインポートして実行する場合があります。

関数計算とは、三角関数(sin,cos)や指数関数、対数関数のことを指します。

その2つの方法と違いを紹介します。

math moduleの場合

import math
print(math.sin(math.radians(30))) #0.49999999999999994
print(math.cos(math.pi/4)) #0.7071067811865476
print(math.exp) #2.718281828459045

mathモジュールをインポートして、sin30°とcos(π/4)とネイピア数を計算しています。

Numpy moduleの場合

import numpy as np
print(np.sin(np.radians(30))) #0.49999999999999994
print(np.cos(np.pi/4)) #0.7071067811865476
print(np.exp) #2.718281828459045

numpyモジュールをインポートして、 sin30°とcos(π/4)とネイピア数を計算しています。

両者の違い

どちらのモジュールも関数計算ができます。

では、両者の違いは何でしょうか。

標準ライブラリか否か

mathモジュールは、標準ライブラリであるため、インストールすることなくインポートして利用することができます。

対して、numpyモジュールは、標準ライブラリではないため、インストールする必要があります。

pip install numpy

対象の値

mathモジュールは、1つの数字のみに対して関数計算をします。したがって、配列などは利用できません。

numpyモジュールは、配列(Numpy配列、リスト、pandas.Series)でも実行できます。

import math
import numpy as np
data=[10,20,30]
print(np.sin(np.radians(data))) #array([0.17364818, 0.34202014, 0.5       ])
print(math.sin(math.radians(data)))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be real number, not list

ここが大きな違いで、以前、pandasのSeriesにmathを使って

TypeError: cannot convert the series to <type 'float'>

このようなエラーメッセージがでて、調べたことで知りました。