Rank

ガウス法を使用して行列ランクを返します。

int  Rank()

戻り値

行列のランク。

注意事項

m行n列の行列Aの行(または列)のシステムのランクは、線形に独立した行(または列)の最大数です。いくつかの行(列)は、他の行で線形に表現できない場合、線形独立と呼ばれます。行システムのランクは常に列システムのランクと同じです。この値は行列のランクと呼ばれます。

MQL5の例

matrix a=matrix::Eye(4, 4);;
Print("matrix a \n", a);
Print("a.Rank()=", a.Rank());
 
matrix I=matrix::Eye(4, 4);
I[3, 3] = 0.;   // rank deficient matrix
Print("I \n", I);
Print("I.Rank()=", I.Rank());
 
matrix b=matrix::Ones(1, 4);
Print("b \n", b);
Print("b.Rank()=", b.Rank());;// 1 dimension - rank 1 unless all 0
 
matrix zeros=matrix::Zeros(4, 1);
Print("zeros \n", zeros);
Print("zeros.Rank()=", zeros.Rank());
 
 /*
matrix a
 [[1,0,0,0]
 [0,1,0,0]
 [0,0,1,0]
 [0,0,0,1]]
a.Rank()=4
 
I
 [[1,0,0,0]
 [0,1,0,0]
 [0,0,1,0]
 [0,0,0,0]]
I.Rank()=3
 
b
 [[1,1,1,1]]
b.Rank()=1
 
zeros
 [[0]
 [0]
 [0]
 [0]]
zeros.Rank()=0
 */

 

Pythonの例

import numpy as np
from numpy.linalg import matrix_rank
a=(np.eye(4)) # Full rank matrix
print("a \n", a)
print("matrix_rank(a)=",matrix_rank(a))
I=np.eye(4)
I[-1,-1] = 0. # rank deficient matrix
print("I \n",I)
print("matrix_rank(I)=",matrix_rank(I))
 
b=np.ones((4,))
print("b \n",b)
print("matrix_rank(b)=",matrix_rank(b)) # 1 dimension - rank 1 unless all 0
 
zeros=np.zeros((4,))
print("zeroes \n",zeros)
print("matrix_rank(zeros)=",matrix_rank(zeros))
 

[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
matrix_rank(a)= 4
 
I
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 0.]]
matrix_rank(I)= 3
 
b
[1. 1. 1. 1.]
matrix_rank(b)= 1
 
zeroes
[0. 0. 0. 0.]
matrix_rank(zeros)= 0