数学関数
1. 学習内容
- ❶ 三角関数:sin、cos、tan、arcsin、arccos、arctan2
- ❷ 指数関数と対数関数:exp、log、log2、log10
- ❸ 丸め:floor、ceil、round、trunc、rint
- ❹ 特殊関数:sqrt、square、sign、abs、clip
2. 主要な概念
PYTHON
import numpy as np
# Trigonometric
angles = np.array([0, np.pi/4, np.pi/2])
print(np.sin(angles)) # [0. 0.707 1.]
print(np.cos(angles)) # [1. 0.707 0.]
print(np.tan(angles)) # [0. 1. inf]
# arctan2: safe angle computation
print(np.arctan2(1, 1)) # 0.785 (pi/4)
# Exponential and log
print(np.exp([0, 1, 2])) # [1. 2.718 7.389]
print(np.log([1, 10, 100])) # [0. 2.303 4.605]
print(np.log10([1, 10, 100])) # [0. 1. 2.]
# Rounding
a = np.array([1.2, 1.7, -1.2, -1.7])
print(np.floor(a)) # [1. 1. -2. -2.]
print(np.ceil(a)) # [2. 2. -1. -1.]
print(np.round(a)) # [1. 2. -1. -2.]
print(np.trunc(a)) # [1. 1. -1. -1.]
# Clipping
data = np.array([1, 5, 10, 15, 20])
print(np.clip(data, 5, 15)) # [5 5 10 15 15]
TEXT
> Output: Run NumPy 2.x in your local Python environment to see the ndarray output. The Piston server does not have NumPy pre-installed — install it locally (`pip install numpy`) and compare. Actual values may vary by NumPy version and random seed.
(1) ▶ サンプル:三角関数(難易度 ⭐)
PYTHON
import numpy as np
angles = np.array([0, np.pi/6, np.pi/4, np.pi/3, np.pi/2])
print("Angles:", angles)
print("sin:", np.sin(angles).round(4))
print("cos:", np.cos(angles).round(4))
print("tan:", np.tan(angles).round(4))
# Inverse trig
print("arcsin(0.5):", np.arcsin(0.5))
print("arccos(0.5):", np.arccos(0.5))
出力:
TEXT角度:[0. 0.52359878 0.78539816 1.04719755 1.57079633] sin: [0. 0.5 0.7071 0.866 1. ] cos: [1. 0.866 0.7071 0.5 0. ] tan: [0. 0.5774 1. 1.7321 inf] arcsin(0.5): 0.5235987755982989 arccos(0.5): 1.0471975511965979
(2) ▶ サンプル:指数関数と対数関数(難易度 ⭐⭐)
PYTHON
import numpy as np
x = np.array([1, 2, 3, 4, 5])
print("exp:", np.exp(x).round(2))
print("log:", np.log(x).round(2))
print("log2:", np.log2(x).round(2))
print("log10:", np.log10(x).round(2))
# Verify: exp(log(x)) ≈ x
restored = np.exp(np.log(x))
print("exp(log(x)):", restored.round(6))
print("Match:", np.allclose(x, restored))
出力:
TEXTexp: [ 2.72 7.39 20.09 54.6 148.41] log: [0. 0.69 1.1 1.39 1.61] log2: [0. 1. 1.58 2. 2.32] log10: [0. 0.3 0.48 0.6 0.7 ] exp(log(x)): [1. 2. 3. 4. 5.] 一致:True
(3) ▶ サンプル:丸めと切り捨て(難易度 ⭐)
PYTHON
import numpy as np
a = np.array([1.2, 1.7, -1.2, -1.7, 2.5, -2.5])
print("floor:", np.floor(a))
print("ceil:", np.ceil(a))
print("trunc:", np.trunc(a))
print("round:", np.round(a))
# Clipping
data = np.array([-10, 5, 15, 20, 100, -5])
clipped = np.clip(data, 0, 50)
print("Original:", data)
print("Clipped [0, 50]:", clipped)
出力:
TEXT階:[ 1. 1. -2. -2. 2. -3.] ceil: [ 2. 2. -1. -1. 3. -2.] trunc: [ 1. 1. -1. -1. 2. -2.] ラウンド:[ 1. 2. -1. -2. 2. -2.] 原文:[-10 5 15 20 100 -5] 切り出し [0, 50]: [ 0 5 15 20 50 0]
Q NumPyの数学関数は、Pythonのmathモジュールよりも高速ですか?
A はい。配列の場合、NumPyはベクトル化(C言語レベル)されています。単一の値の場合、Pythonのmathモジュールの方がわずかに高速です。配列にはNumPyを、スカラーにはPythonのmathモジュールを使用してください。
Q np.round と np.around の違いは何ですか?
A これらは同じものです。
np.around は np.round の別名です。どちらも、最も近い整数(または指定された小数点以下の桁数)に丸めます。Q np.clip は何に使うのですか?
A クリッピングは値を特定の範囲内に制限する機能です。外れ値の除去、ピクセル値のクリッピング、あるいは数値の安定性を確保するのに役立ちます。
❓ よくある質問
Q 最も重要なポイントは何か?
A NumPyの演算はベクトル化されているため、パフォーマンスを向上させるにはPythonのループは避けるべきだ。
Q さらに詳しく知りたい場合はどうすればよいですか?
A 詳細なリファレンスや高度なトピックについては、numpy.org の NumPy 公式ドキュメントをご覧ください。
Q これはNumPy 2.xでも動作しますか?
A はい。すべての例はNumPy 2.xと互換性があります。一部の古いAPI(np.random.seedなど)は引き続きサポートされていますが、最新の代替APIの使用をお勧めします。
📖 まとめ
- 三角関数:sin、cos、tan、arcsin、arccos、arctan、arctan2
- 指数関数/対数関数: exp、log、log2、log10、expm1、log1p
- 丸め:floor、ceil、round、trunc、rint
- クリップ:
np.clip(data, min, max)— 範囲の制限 - すべての関数はベクトル化されており、NumPyに対応しています
📝 練習問題
-
初心者向け(難易度 ⭐):0 から 2π までの角度を π/4 刻みで並べる配列を作成してください。それぞれの角度について、sin、cos、tan を計算してください。
-
中級(難易度 ⭐⭐):0.1 から 10 までの値 100 個からなる配列を作成してください。それぞれの値について、log10、ln、exp を計算してください。また、exp(log(x)) ≈ x であることを確認してください。
-
上級(難易度 ⭐⭐⭐):
np.clipを使用して、データセットから外れ値を除去します。具体的には、5パーセンタイル未満の値を5パーセンタイルの値に、95パーセンタイルを超える値を95パーセンタイルの値に置き換えます。