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

【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 ]]]
  1. Pythonで複素エルミート行列・実対称行列の固有値を求める方法(numpy.eigvalsh)

    Pythonで複素エルミート行列や実対称行列の固有値を計算したい場合は、NumPyの numpy.eigvalsh() メソッドを使うのが便利です。このメソッドは、固有値を昇順で返し、重複度に応じて同じ固有値を繰り返し出力します。主な引数は以下の通りです。第1引数 a: 固有値を計算したい複素数または実数の行列を指定します。第2引数 UPLO: 行列のどちらの三角部分を使って計算するかを指定します。デフォルトは L(下三角部分)、U を指定すると上三角部分が使用されます。なお、この指定に関わらず、エルミート行列の性質を保つため、対角成分については実部のみが計算に使われ、虚部は常にゼロとして扱わ

  2. 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です。指定