给定m.n ,创建一个满秩矩阵A
import random
import numpy as np
np.set_printoptions(suppress=True, precision=3)
class RankFullMatrix(object):
def __init__(self, input_row, input_column):
self.row = input_row
self.column = input_column
self._rank_full_matrix = np.zeros((self.row, self.column))
self._rankn_matrix = np.zeros((self.row, self.column))
self._rankm_matrix = np.zeros((self.row, self.column))
self.get_result()
def get_result(self):
my_rankn_matrix = self.rankn_matrix
my_rankm_matrix = self.rankm_matrix
my_full_rank_matrix = self.rank_full_matrix
print("*" * 50)
print(f"row={self.row},column={self.column},rank_A={np.linalg.matrix_rank(my_full_rank_matrix)}")
print(f"rank_full_matrix=\n{my_full_rank_matrix}")
print("*" * 50)
@property
def rank_full_matrix(self):
if self.row > self.column:
self._rank_full_matrix = self.rankn_matrix
else:
self._rank_full_matrix = self.rankm_matrix
return self._rank_full_matrix
@property
def rankn_matrix(self):
if self.row > self.column:
eye_n = np.eye(self.column) + 0.01 * np.random.randn(self.column, self.column)
add_row = np.random.rand(self.row - self.column, self.column)
self._rankn_matrix = np.row_stack((eye_n, add_row))
return self._rankn_matrix
@property
def rankm_matrix(self):
eye_m = np.eye(self.row) + np.random.randn(self.row, self.row)
if self.row < self.column:
add_column = np.random.rand(self.row, self.column - self.row)
self._rankm_matrix = np.column_stack((eye_m, add_column))
else:
self._rankm_matrix = eye_m
return self._rankm_matrix
if __name__ == "__main__":
row = [random.randint(2, 5) for _ in range(5)]
column = [random.randint(2, 5) for _ in range(5)]
for row_i, column_j in zip(row, column):
rank_matrix = RankFullMatrix(row_i, column_j)
rank_matrix.get_result()
**************************************************
row=4,column=5,rank_A=4
rank_full_matrix=
[[ 2.21 -0.271 0.89 1.62 0.227]
[ 1.443 -0.657 -0.199 -0.368 0.53 ]
[ 1.682 0.445 2.776 -0.883 0.999]
[-1.654 0.838 0.498 0.351 0.743]]
**************************************************
**************************************************
row=4,column=5,rank_A=4
rank_full_matrix=
[[ 0.346 0.992 0.698 0.475 0.984]
[ 0.482 0.014 -2.604 0.789 0.581]
[-1.176 -0.733 0.51 0.718 0.945]
[ 0.018 -1.346 0.39 -0.554 0.993]]
**************************************************
**************************************************
row=4,column=2,rank_A=2
rank_full_matrix=
[[1.002 0.005]
[0.005 0.99 ]
[0.167 0.441]
[0.59 0.608]]
**************************************************
**************************************************
row=4,column=2,rank_A=2
rank_full_matrix=
[[ 0.995 -0.021]
[ 0.001 1.004]
[ 0.597 0.225]
[ 0.77 0.073]]
**************************************************
**************************************************
row=5,column=3,rank_A=3
rank_full_matrix=
[[ 0.997 0.007 0.009]
[ 0.004 0.999 -0. ]
[-0.001 -0.005 1.025]
[ 0.742 0.443 0.35 ]
[ 0.857 0.851 0.473]]
**************************************************
**************************************************
row=5,column=3,rank_A=3
rank_full_matrix=
[[ 0.992 0.002 0.019]
[-0.004 1.005 -0.006]
[ 0.017 -0.011 1.007]
[ 0.769 0.052 0.886]
[ 0.666 0.063 0.575]]
**************************************************
**************************************************
row=3,column=3,rank_A=3
rank_full_matrix=
[[ 0.152 -0.127 1.233]
[-0.259 1.998 -0.167]
[-0.474 -1.351 -0.546]]
**************************************************
**************************************************
row=3,column=3,rank_A=3
rank_full_matrix=
[[ 0.415 0.267 0.018]
[-0.512 2.225 0.521]
[ 0.886 1.15 1.472]]
**************************************************
**************************************************
row=2,column=5,rank_A=2
rank_full_matrix=
[[-0.146 0.186 0.775 0.739 0.848]
[-0.298 0.327 0.346 0.787 0.956]]
**************************************************
**************************************************
row=2,column=5,rank_A=2
rank_full_matrix=
[[-0.332 -1.686 0.763 0.768 0.848]
[ 0.163 0.693 0.296 0.31 0.4 ]]
**************************************************