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

Pythonで複素エルミート行列・実対称行列の固有値を求める方法(numpy.eigvalsh)

Pythonで複素エルミート行列や実対称行列の固有値を計算したい場合は、NumPyの numpy.eigvalsh() メソッドを使うのが便利です。このメソッドは、固有値を昇順で返し、重複度に応じて同じ固有値を繰り返し出力します。

主な引数は以下の通りです。

  • 第1引数 a: 固有値を計算したい複素数または実数の行列を指定します。
  • 第2引数 UPLO: 行列のどちらの三角部分を使って計算するかを指定します。デフォルトは 'L'(下三角部分)、'U' を指定すると上三角部分が使用されます。なお、この指定に関わらず、エルミート行列の性質を保つため、対角成分については実部のみが計算に使われ、虚部は常にゼロとして扱われます。

手順

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

import numpy as np
from numpy import linalg as LA

numpy.array() メソッドを使って2次元のNumPy配列を作成します。

arr = np.array([[5+2j, 9-2j], [0+2j, 2-1j]])

配列を表示してみましょう。

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

配列の次元(ndim)を確認します。

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

配列のデータ型(dtype)を確認します。

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

配列の形状(shape)を確認します。

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

ここで、複素エルミート行列または実対称行列の固有値を計算するために numpy.eigvalsh() メソッドを使用します。

print("\nResult...\n",LA.eigvalsh(arr))

サンプルコード全体

from numpy import linalg as LA
import numpy as np

# numpy.array() メソッドで2次元配列を作成
arr = np.array([[5+2j, 9-2j], [0+2j, 2-1j]])

# 配列を表示
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)

# eigvalsh() で固有値を計算
print("\nResult...\n",LA.eigvalsh(arr))

実行結果

Our Array...
[[5.+2.j 9.-2.j]
[0.+2.j 2.-1.j]]

Dimensions of our Array...
2

Datatype of our Array object...
complex128

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

Result...
[1. 6.]

このように、LA.eigvalsh() を呼び出すだけで、与えられた複素行列の固有値が昇順に並んだ配列 [1. 6.] として得られます。一般の行列に対しては numpy.linalg.eigvals() を使用しますが、エルミート行列や対称行列であることが分かっている場合は、eigvalsh() の方が高速かつ数値的に安定して計算できる点が大きなメリットです。

  1. Pythonでフロベニウスノルムを使って線形代数における行列の条件数を計算する方法

    線形代数において行列の条件数(条件数)を計算するには、Pythonの numpy.linalg.cond() メソッドを使用します。このメソッドは、引数 p の値に応じて7種類の異なるノルムから選択して条件数を返すことができます。返される値は行列の条件数であり、無限大になる場合もあります。行列 x の条件数は、「x のノルム × x の逆行列のノルム」として定義されます。ここで使用するノルムは、一般的なL2ノルムのほか、さまざまな行列ノルムの中から選択できます。第1引数の x は、条件数を求めたい対象となる行列です。第2引数の p は、条件数の計算に使用するノルムの種類(次数)を指定します。パ

  2. Pythonで複素エルミート行列・実対称行列の固有値を求める方法(numpy.eigvalsh)

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