Numpyのfrompyfuncメソッドを使ってユニバーサル関数を自作する方法

スポンサーリンク

読者の今回は、PythonプログラミングにおけるNumPyのユニバーサル関数に焦点を当てます。

スポンサーリンク

NumPy Universal Functions とはどういう意味か?

NumPy の普遍的な関数は、実際には数学的な関数です。

NumPy の数学的な関数は、普遍関数という枠でくくられます。

これらの万能(数学的)NumPy関数は、NumPy配列に対して操作し、データ値に対して要素ごとの操作を行います。

NumPyのユニバーサル関数は、Pythonのnumpy.ufuncクラスに属します。

基本的な数学的演算のいくつかは、ある演算子を呼び出すと内部で呼び出されます。

例えば、x + yを枠で囲むと、内部でnumpy.add()という万能関数が呼び出されます。

私たちはfrompyfunc()メソッドを使って独自の万能関数を作ることもできます。

構文は以下の様な感じです。

numpy.frompyfunc(function-name, input, output)
  • function-name: 汎用関数としてフレーム化される関数の名前
  • 入力。入力配列の数
  • 出力 出力配列の数

例えば、以下の様になります。

この例では、frompyfunc()メソッドを使って関数productをユニバーサル関数に変換しています。

これにより、product()メソッドは普遍的な数学関数のように振る舞い、配列がパラメータとして渡されたときに要素ごとの乗算を実行するようになりました。

import numpy as np
 
def product(a, b):
  return a*b
 
product = np.frompyfunc(product, 2, 1)
 
res = product([1, 2, 3, 4], [1,1,1,1])
print(res)

結果は以下の通りです。

[1 2 3 4]

1. NumPyにおける普遍的な三角関数

このコンセプトの下、NumPy の三角関数について説明します。

numpy.deg2raf()。

この関数は、次数の値をラジアンに変換するのに役立ちます。

2. numpy.sinh()関数。

numpy.sinh()関数:ハイパーボリックサインの値を計算します。

numpy.sin()関数:ハイパーボリックサイン値を計算します。

ハイパーボリックサイン値の逆数を求める。

numpy.hypot()関数:ハイパーボリックサイン値の逆数を求める。

numpy.hypot() 関数:直角三角形構造の斜辺を計算します。

例えば、以下の様になります。

import numpy as np
 
data = np.array([0, 30, 45])
 
rad = np.deg2rad(data)
 
# hyperbolic sine value
print('Sine hyperbolic values:')
hy_sin = np.sinh(rad)
print(hy_sin)
 
# inverse sine hyperbolic
print('Inverse Sine hyperbolic values:')
print(np.sin(hy_sin))
 
# hypotenuse
b = 3
h = 6
print('hypotenuse value for the right angled triangle:')
print(np.hypot(b, h))

出力。

Sine hyperbolic values:
[0.         0.54785347 0.86867096]
Inverse Sine hyperbolic values:
[0.         0.52085606 0.76347126]
hypotenuse value for the right angled triangle:
6.708203932499369

2. 汎用統計関数

三角関数とは別に、Python NumPy は汎用統計関数も提供しています。

そのいくつかを以下に示します。

  1. numpy.amin()関数。numpy.amin()関数:配列から最小値を表す。
    numpy.amax()関数。numpy.amax()関数:配列から最大値を取り出す。
    3.numpy.ptp()関数。最大値から最小値を引いた、軸をまたぐ配列の値の範囲を表す。
  2. numpy.average()関数。配列の要素の平均を計算します。

例えば、以下の様になります。

import numpy as np
 
data = np.array([10.2,34,56,7.90])
 
print('Minimum and maximum data values from the array: ')
print(np.amin(data))
print(np.amax(data))
 
print('Range of the data: ')
print(np.ptp(data))
 
print('Average data value of the array: ')
print(np.average(data))

出力。

Minimum and maximum data values from the array:
7.9
56.0
Range of the data:
48.1
Average data value of the array:
27.025000000000002

まとめ

ここまでで、このトピックは終了です。

何か疑問があれば、お気軽にコメントください。

Pythonプログラミングに関連するこのような記事のために、私たちにご期待ください。

タイトルとURLをコピーしました