HOWTO · Python
Python で Pi を使用する
このチュートリアルでは、Python で円周率の値を使用します
このページの内容
数値による円周率の近似値が必要なら、Python 標準ライブラリの math.pi を使います。計算ですでに NumPy 配列を使っている場合は numpy.pi が適しています。代数式を記号のまま扱いたい場合は sympy.pi を使います。これらはいずれも関数ではなく定数です。以下の例では、それぞれが役立つ場面、円周率の取得と角度変換の違い、手書きの近似値が主に学習目的である理由を説明します。
Python の math.pi 定数で円周率を取得する
通常の数値計算には、標準ライブラリの math モジュールが最も手軽で、サードパーティ製パッケージも必要ありません。math をインポートし、math.pi をそのまま参照します。この値は浮動小数点数による近似値なので、計算には数学的に厳密な定数ではなく有限の精度が使われます。
次の例を実行します。コードと出力に含まれるラベルは英語のまま表示されます。
import math
radius = 5
area = math.pi * radius**2
print(f"Area: {area}")
Area: 78.53981633974483
この例では、円の面積の公式 πr² を使っています。math.pi は浮動小数点値なので、結果も数値による近似値です。
math.pi() のように括弧を付けてはいけません。括弧を付けると、関数ではない値を呼び出そうとしてしまいます。円周率を数値として使う一般的なスクリプトでは、math.pi をそのまま使えます。
配列計算には NumPy の pi 定数を使う
周囲の計算ですでに NumPy 配列を使っている場合は、NumPy の配列演算とあわせて pi 定数を使うと便利です。NumPy を np としてインポートし、括弧を付けずに np.pi(別名 numpy.pi)を参照します。たとえば、度単位の角度配列に np.pi / 180 を掛けると、NumPy の三角関数を適用する前に値をラジアンへ変換できます。
次の例では、3つの角度を配列計算でラジアンに変換します。コードと出力に含まれるラベルは英語のまま表示されます。
import numpy as np
degrees = np.array([0, 90, 180])
radians = degrees * np.pi / 180
print(radians)
[0. 1.57079633 3.14159265]
NumPy はサードパーティ製の依存パッケージなので、スクリプトを実行する環境にインストールする必要があります。NumPy をほかの用途で使わない単一のスカラー計算なら、標準ライブラリの math.pi を使えば依存関係を増やさずに済みます。numpy.pi も同じ一般的な数値定数を表します。実用上の利点は精度の種類が異なることではなく、配列を使うコードとの一貫性です。
記号数学には SymPy の pi を使う
式をすぐ浮動小数点計算に変換せず、代数、微積分、または厳密な形式の操作のために記号のまま保ちたい場合は、SymPy を使います。from sympy import pi, symbols を使うと、式 pi * x**2 の円周率と記号 x は記号のまま保たれます。その後、SymPy で式を数学的に操作できます。数値による近似値への変換は別の手順です。
これは、数値による浮動小数点値である math.pi や numpy.pi とは異なります。SymPy もサードパーティ製の依存パッケージです。円周率の数値が欲しいだけなら SymPy をインポートせず、記号として扱う必要がある場合に sympy.pi を選びましょう。
math.radians で度をラジアンに変換する
math.radians(degrees) は、度数法で表した角度をラジアンに変換します。たとえば、math.radians(90) は π/2 の浮動小数点近似値を返し、math.radians(180) は π の近似値を返します。この関係は角度変換には便利ですが、円周率を取得する一般的な方法ではありません。円周率の値そのものが必要なら math.pi を使います。
次の例を実行します。コードと出力に含まれるラベルは英語のまま表示されます。
import math
angle_degrees = 90
angle_radians = math.radians(angle_degrees)
print(f"Radians: {angle_radians}")
Radians: 1.5707963267948966
すでに NumPy を使う処理で複数の角度を扱うなら、NumPy にも配列向けの度数変換機能があります。一方、単一の角度を変換する場合は math.radians が分かりやすい標準ライブラリの選択肢です。
学習用の例では独自の円周率近似値を使う
短い小数の近似値を使うと、数式で定数をどう使うかを示せます。コードと出力に含まれるラベルは英語のまま表示されます。
PI = 3.141592653589793
diameter = 10
circumference = PI * diameter
print(f"Circumference: {circumference}")
Circumference: 31.41592653589793
ここで割り当てた桁数も有限の近似値にすぎず、通常の作業で手入力する利点はありません。一般的な数値計算では math.pi を使い、独自の値は数式や定数、近似精度について学ぶ例にとどめましょう。