【Python】numpy.linalg.pinv()で行列スタックのムーア・ペンローズ疑似逆行列を計算する方法
行列のスタック(複数の行列をまとめた配列)のムーア・ペンローズ疑似逆行列を計算するには、Pythonのnumpy.linalg.pinv()メソッドを使用します。このメソッドは、特異値分解(SVD)を利用して行列の一般化逆行列を計算し、十分に大きい特異値をすべて考慮に入れます。
主なパラメータは以下の通りです。
- 第1パラメータ「a」: 疑似逆行列を求める対象となる行列、または行列のスタック。
- 第2パラメータ「rcond」: 小さな特異値に対するカットオフ値。「rcond × 最大特異値」以下の特異値はゼロとして扱われます。行列のスタックに対してブロードキャストされます。
- 第3パラメータ「hermitian」: Trueを指定すると、入力行列aがエルミート行列であるとみなされ、より効率的な特異値計算手法が適用されます。デフォルトはFalseです。
手順
まず、必要なライブラリをインポートします。
import numpy as np
array()関数を使って配列を作成します。ここでは、2×2行列を3つ含む3次元配列(行列のスタック)を作成します。
arr = np.array([ [[1, 2], [3, 4]], [[1, 2], [2, 1]], [[1, 3], [3, 1]] ])
作成した配列を表示します。
print("Our Array...\n",arr)
配列の次元を確認します。
print("\nDimensions of our Array...\n",arr.ndim)
配列のデータ型を取得します。
print("\nDatatype of our Array object...\n",arr.dtype)
配列の形状を取得します。
print("\nShape of our Array object...\n",arr.shape)
行列のスタックのムーア・ペンローズ疑似逆行列を計算するには、numpy.linalg.pinv()メソッドを使用します。
print("\nResult...\n",np.linalg.pinv(arr))
完全なコード例
import numpy as np
# array()を使って配列を作成
arr = np.array([ [[1, 2], [3, 4]], [[1, 2], [2, 1]], [[1, 3], [3, 1]] ])
# 配列を表示
print("Our Array...\n",arr)
# 次元を確認
print("\nDimensions of our Array...\n",arr.ndim)
# データ型を取得
print("\nDatatype of our Array object...\n",arr.dtype)
# 形状を取得
print("\nShape of our Array object...\n",arr.shape)
# numpy.linalg.pinv()で行列スタックの疑似逆行列を計算
print("\nResult...\n",np.linalg.pinv(arr))
実行結果
Our Array... [[[1 2] [3 4]] [[1 2] [2 1]] [[1 3] [3 1]]] Dimensions of our Array... 3 Datatype of our Array object... int64 Shape of our Array object... (3, 2, 2) Result... [[[-2. 1. ] [ 1.5 -0.5 ]] [[-0.33333333 0.66666667] [ 0.66666667 -0.33333333]] [[-0.125 0.375 ] [ 0.375 -0.125 ]]]
-
Pythonで複素エルミート行列・実対称行列の固有値を求める方法(numpy.eigvalsh)
Pythonで複素エルミート行列や実対称行列の固有値を計算したい場合は、NumPyの numpy.eigvalsh() メソッドを使うのが便利です。このメソッドは、固有値を昇順で返し、重複度に応じて同じ固有値を繰り返し出力します。主な引数は以下の通りです。第1引数 a: 固有値を計算したい複素数または実数の行列を指定します。第2引数 UPLO: 行列のどちらの三角部分を使って計算するかを指定します。デフォルトは L(下三角部分)、U を指定すると上三角部分が使用されます。なお、この指定に関わらず、エルミート行列の性質を保つため、対角成分については実部のみが計算に使われ、虚部は常にゼロとして扱わ
-
Python NumPyのnp.tanh()で配列要素の双曲線正接を計算する方法
配列要素の双曲線正接(ハイパボリック・タンジェント)を計算するには、PythonのNumPyが提供する numpy.tanh() メソッドを使用します。このメソッドは np.sinh(x)/np.cosh(x) または -1j * np.tan(1j*x) と数学的に等価であり、入力値に対応する双曲線正接の値を返します。入力 x がスカラーの場合、戻り値もスカラーになります。np.tanh()の主な引数第1引数(x): 入力となる配列です。ここに渡した各要素に対して双曲線正接が計算されます。第2引数と第3引数は省略可能です。第2引数(out): 計算結果を格納するためのndarrayです。指定