Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python・NumPyのpolyval()で係数列にブロードキャストされた点xの多項式を評価する方法


PythonのNumPyライブラリでは、polynomial.polyval()メソッドを使用することで、指定した点xにおける多項式の値を簡単に評価できます。本記事では、係数列に対してブロードキャストを行いながら多項式を評価する方法を、各パラメータの詳細や具体的なコード例とともに解説します。

polyval()メソッドの主なパラメータ

第1引数:x(評価する点)

xがリストまたはタプルとして渡された場合、自動的にndarrayへ変換されます。それ以外の場合は変更されず、スカラーとして扱われます。どちらの場合でも、xまたはその要素は、自身同士および係数配列cの要素との加算・乗算をサポートしている必要があります。

第2引数:C(係数配列)

次数nの項に対応する係数がc[n]に格納されるように並べられた係数の配列です。cが多次元の場合、残りのインデックスは複数の多項式を表します。2次元配列の場合、係数はcの各列に格納されているとみなすことができます。

第3引数:tensor(テンソル展開の有無)

Trueを指定した場合、係数配列の形状は右側に1が追加される形で拡張されます(xの各次元ごとに1つ追加)。スカラーの次元数は0として扱われます。その結果、c内のすべての係数列が、xのすべての要素に対して評価されます。一方、Falseを指定した場合は、評価の際にxがcの列方向へブロードキャストされます。このキーワードは、cが多次元配列である場合に特に役立ちます。デフォルト値はTrueです。

実装の手順

まず、必要なライブラリをインポートします。

import numpy as np
from numpy.polynomial.polynomial import polyval

次に、np.arange()とreshape()を使って、2×2の多次元係数配列を作成します。

c = np.arange(4).reshape(2,2)

作成した配列を表示します。

print("Our Array...\n",c)

配列の次元数を確認します。

print("\nDimensions of our Array...\n",c.ndim)

配列のデータ型を取得します。

print("\nDatatype of our Array object...\n",c.dtype)

配列の形状を取得します。

print("\nShape of our Array object...\n",c.shape)

点xにおける多項式を評価するには、polynomial.polyval()メソッドを使用します。ここではtensor=Falseを指定し、xを係数列の方向へブロードキャストしています。

print("\nResult...\n",polyval([1,2], c, tensor=False))

完全なコード例

import numpy as np
from numpy.polynomial.polynomial import polyval

# 多次元の係数配列を作成
c = np.arange(4).reshape(2,2)

# 配列を表示
print("Our Array...\n",c)

# 次元数を確認
print("\nDimensions of our Array...\n",c.ndim)

# データ型を取得
print("\nDatatype of our Array object...\n",c.dtype)

# 形状を取得
print("\nShape of our Array object...\n",c.shape)

# polyval()メソッドで点xにおける多項式を評価
print("\nResult...\n",polyval([1,2], c, tensor=False))

出力結果

Our Array...
[[0 1]
   [2 3]]

Dimensions of our Array...
2

Datatype of our Array object...
int64

Shape of our Array object...
(2, 2)

Result...
[2. 7.]

結果の解釈

出力された[2. 7.]は、tensor=Falseによってxの各要素が係数配列cの各列に対応付けられ、それぞれ評価された結果です。

  • 1列目の係数 [0, 2](多項式 0 + 2x)を x=1 で評価 → 0 + 2×1 = 2
  • 2列目の係数 [1, 3](多項式 1 + 3x)を x=2 で評価 → 1 + 3×2 = 7

なお、入力の係数配列はint64型ですが、評価結果は浮動小数点数(float型)として返される点にも注意してください。


  1. 【Python】3次元の係数配列を使ってxとyのデカルト積上の2次元多項式を評価する方法

    xとyのデカルト積(直積)上で2次元多項式を評価するには、Pythonの numpy.polynomial.polynomial モジュールに含まれる polygrid2d(x, y, c) メソッドを使用します。このメソッドは、xとyのデカルト積の各点における2次元多項式の値を返します。パラメータの説明第1パラメータ(x, y): 評価対象となる2つの系列です。xまたはyがリストやタプルとして渡された場合は、まずndarrayに変換されます。すでにndarrayである場合はそのまま使用され、それ以外の場合はスカラーとして扱われます。第2パラメータ(c): 多項式の係数を格納した配列です。次数

  2. Python NumPyのpolyval3d()メソッドで4D係数配列を使って点(x, y, z)の3D多項式を評価する方法

    3D多項式を点(x, y, z)で評価するには、Python NumPyのpolynomial.polyval3d()メソッドを使用します。このメソッドは、x、y、zの対応する値から構成される三つ組の点における多次元多項式の値を返します。polyval3d()メソッドのパラメータ引数として渡すx、y、zは、同じ形状を持つ必要があります。いずれかがリストまたはタプルの場合は、まずndarrayに変換されます。ndarrayでない場合はスカラーとして扱われます。パラメータcは係数の配列で、多項式の次数 i, j, k に対応する項の係数が c[i,j,k] に格納されるように並べられています。cの