mathの基本活用
平方根など
import math
x = 3
y = 4
# 平方根 (sqrt)
print("sqrt(x):", math.sqrt(x))
# べき乗 (pow)
print("pow(x, y):", math.pow(x, y))
# 切り上げ (ceil)
print("ceil(x):", math.ceil(x))
# 切り捨て (floor)
print("floor(x):", math.floor(x))
# 絶対値 (fabs)
print("fabs(x):", math.fabs(x))
# 斜辺の長さ (hypot)
print("hypot(x, y):", math.hypot(x, y))
-------実行結果-------
sqrt(x): 1.7320508075688772
pow(x, y): 81.0
ceil(x): 3
floor(x): 3
fabs(x): 3.0
hypot(x, y): 5.0
三角関数
import math
x = math.pi
y = 3
print(x)
# 三角関数 (sin / cos / tan) - 追加
print("sin(x):", math.sin(x))
print("cos(x):", math.cos(x))
print("tan(x):", math.tan(x))
# 角度変換 (degrees / radians) - 追加
print("degrees(x):", math.degrees(x)) # 2ラジアンを度に変換
print("radians(x):", math.radians(x)) # 2度をラジアンに変換
-------実行結果-------
3.141592653589793
sin(x): 1.2246467991473532e-16
cos(x): -1.0
tan(x): -1.2246467991473532e-16
degrees(x): 180.0
radians(x): 0.05483113556160755
numpyで三角関数
import numpy as np
import matplotlib.pyplot as plt
# 1. 0度から360度までのデータを生成
x_deg = np.linspace(0, 360, 500)
# 2. 度数をラジアンに変換してsinを計算
y = np.sin(np.radians(x_deg))
# 3. グラフのプロット
plt.figure(figsize=(8, 4))
plt.plot(x_deg, y, label='sin(x)', color='blue')
# 4. グラフの見栄えの調整
plt.title('Sine Wave')
plt.xlabel('Angle (degrees)')
plt.ylabel('Value')
# 横軸の目盛りを90度刻みに設定
plt.xticks(np.arange(0, 361, 90))
plt.grid(True)
plt.legend()
plt.axhline(0, color='black', linewidth=0.5) # 0基準線
plt.axvline(0, color='black', linewidth=0.5)
# 5. グラフの表示
plt.show()
mathで三角関数
numpyを使わずにmathだけでsinカーブを描くことはできますか?
numpyを使わずにmathモジュールだけでサインカーブを描画することは技術的には可能です。しかし、いくつかの違いと考慮点があります。
mathモジュールのみで描画する方法:
mathモジュールは、math.sin()のように単一の数値に対して数学関数を適用します。そのため、サインカーブの複数の点 (x_deg と y の配列) を生成するには、Pythonのループを使って各点の値を計算し、それをリストに格納する必要があります。例えば、forループとmath.sin()を使って各角度でのサイン値を計算し、それらをmatplotlibに渡してプロットすることになります。
import math
import matplotlib.pyplot as plt
# 1. 0度から360度までのデータを生成 (Numpyを使わない方法)
x_deg = [i for i in range(361)] # 0度から360度まで1度刻みで生成
# 2. 各度数をラジアンに変換してsinを計算 (Numpyを使わない方法)
y = [math.sin(math.radians(angle)) for angle in x_deg]
# 3. グラフのプロット (残りの部分は同じ)
plt.figure(figsize=(8, 4))
plt.plot(x_deg, y, label='sin(x)', color='blue')
# 4. グラフの見栄えの調整
plt.title('Sine Wave (using math module)')
plt.xlabel('Angle (degrees)')
plt.ylabel('Value')
plt.xticks(range(0, 361, 90))
plt.grid(True)
plt.legend()
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
# 5. グラフの表示
plt.show()
numpyを使用する場合との違い:
- 効率性:
numpyは内部的にC言語で実装されており、配列全体に対する操作(ベクトル化演算)が非常に高速です。Pythonの標準的なループで一つずつ計算するよりもはるかに効率的です。特にデータ点が多い場合、その差は顕著になります。 - 簡潔性:
numpy.linspace()やnumpy.radians()、numpy.sin()といった関数は、配列全体に一度に操作を適用できるため、コードがより簡潔になります。
したがって、mathモジュールだけで描画することは可能ですが、データ分析や科学計算の文脈では、効率とコードの簡潔さからnumpyを使用するのが一般的で推奨されます。特に、大規模なデータセットや複雑な計算を行う場合にはnumpyが不可欠です。
mathについて
math の後ろについている hypot のようなものは「関数(function)」です。
より正確に言うと、math はPythonの標準ライブラリの一つである「モジュール(module)」で、そのモジュールに含まれる「関数(function)」を . (ドット) 演算子を使って呼び出しています。
例えば、math.hypot() は math モジュールの中にある hypot という名前の関数を呼び出しています。
基本的な数学関数:
math.sqrt(x):xの平方根を返します。math.pow(x, y):xのy乗を返します。math.ceil(x):x以上の最小の整数を返します(切り上げ)。math.floor(x):x以下の最大の整数を返します(切り捨て)。math.fabs(x):xの絶対値を返します。- math.hypot(x, y):# 斜辺の長さ (hypot) – 追加 print(“hypot(x, y):“, math.hypot(x, y))
対数関数:
math.log(x, [base]):xの自然対数(または指定されたbaseの対数)を返します。math.log10(x):xの10を底とする対数を返します。
三角関数:
math.sin(x):xラジアンのサインを返します。math.cos(x):xラジアンのコサインを返します。math.tan(x):xラジアンのタンジェントを返します。math.degrees(x): ラジアンxを角度に変換します。math.radians(x): 角度xをラジアンに変換します。
定数:
math.pi: 円周率π (3.14159…)。math.e: 自然対数の底e (2.71828…)。

コメント