Pythonの特異値分解(SVD)を使ってフルランク行列のランクを求める方法
NumPy配列の行列ランクを特異値分解(SVD)法によって求めるには、Pythonのnumpy.linalg.matrix_rank()メソッドを使用します。配列のランクとは、許容誤差(tol)よりも大きい特異値の個数のことです。第1引数のAには、入力となるベクトルまたは行列のスタックを指定します。
第2引数のtolは、SVDの値がゼロとみなされる閾値です。tolがNoneの場合、SがMの特異値を格納した配列、epsがSのデータ型におけるイプシロン値であるとすると、tolは「S.max() * max(M, N) * eps」として自動的に設定されます。第3引数のhermitianは、Trueに設定するとAがエルミート行列であると仮定され、特異値をより効率的な手法で計算できるようになります。デフォルトはFalseです。
実行手順
まず、必要なライブラリをインポートします。
import numpy as np from numpy.linalg import matrix_rank
次に、5×5の単位行列を作成します。
arr = np.eye(5)
作成した配列を表示します。
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.matrix_rank()メソッドを使って、配列の行列ランクを特異値分解により求めます。
print("\nRank (Full-Rank Matrix)...\n",matrix_rank(arr))サンプルコード
import numpy as np
from numpy.linalg import matrix_rank
# 配列を作成
arr = np.eye(5)
# 配列を表示
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)
# 特異値分解法により行列ランクを求める
print("\nRank (Full-Rank Matrix)...\n",matrix_rank(arr))出力結果
Our Array... [[1. 0. 0. 0. 0.] [0. 1. 0. 0. 0.] [0. 0. 1. 0. 0.] [0. 0. 0. 1. 0.] [0. 0. 0. 0. 1.]] Dimensions of our Array... 2 Datatype of our Array object... float64 Shape of our Array object... (5, 5) Rank (Full-Rank Matrix)... 5
この例では、np.eye(5)で作成した5×5の単位行列はフルランク行列であるため、matrix_rank()メソッドは正しく「5」を返しています。単位行列のすべての特異値が1であり、いずれも閾値より大きいため、ランクは行数・列数と一致します。
-
Pythonでソート済み2D行列を効率的に検索する方法(Search a 2D Matrix II)
問題の概要 m × n の行列が与えられたとき、その中から特定の値を効率的に検索するアルゴリズムを実装することを考えます。この行列には、以下のような性質があります。 各行の整数は、左から右に向かって昇順に並んでいる 各列の整数は、上から下に向かって昇順に並んでいる 行列の例 たとえば、次のような5×5の行列を考えてみましょう。 1471115 2581219 3691622 1013141724 1821232630 このとき、検索対象(target)が「5」であれば True を返し、「20」であれば False を返します。 アルゴリズムの考え方 この問題を効率的に解く鍵となるのは
-
Pythonの数学関数一覧|abs・ceil・sqrtなどの使い方と戻り値を徹底解説
Pythonの数学関数とは Pythonには、絶対値・切り上げ・切り下げ・対数・平方根などの数値計算を行うための関数が標準で用意されています。その多くはmathモジュールに含まれており、import mathと記述することで利用できます。一方、abs()、max()、min()、round()は組み込み関数として提供されているため、インポートせずにすぐ使えるのが特徴です。 以下に、代表的な数学関数とその戻り値を一覧形式でまとめました。 No.関数説明(戻り値) 1abs(x)xの絶対値。xと0の間の(正の)距離を返します。 2ceil(x)xの切り上げ値。x以上となる最小の整数を返し