Matrices Generator

In [11]:
from scipy.stats import ortho_group
import random
import numpy as np

def lambda_generator(dim):
    randomlist = [random.random() for i in range(0, dim)]
    return randomlist

If we want to control the eigenvalues for the matrix, changing this random list is a good approach to get things done.

In [12]:
def matrix_generator(dim):
    M = ortho_group.rvs(dim=dim)
    lambdas = lambda_generator(dim)
    D = np.zeros((dim, dim), float)
    np.fill_diagonal(D, lambdas)
    A = np.matmul(M, D)
    A = np.matmul(A, np.linalg.inv(M))
    return A, lambdas

if __name__ == '__main__':
    dim = 5
    A, eigenvals = matrix_generator(dim)
    print('\n-------------- matrix A ---------------')
    print(A)
    print('\n-------------- random eigenvalues ---------------')
    print(eigenvals)
-------------- matrix A ---------------
[[ 0.7653706  -0.08487877 -0.0055044  -0.1156457   0.05058963]
 [-0.08487877  0.69646098  0.01552041  0.01123542  0.0570537 ]
 [-0.0055044   0.01552041  0.30736143 -0.14460661  0.01842245]
 [-0.1156457   0.01123542 -0.14460661  0.51509752 -0.05649798]
 [ 0.05058963  0.0570537   0.01842245 -0.05649798  0.61728912]]

-------------- random eigenvalues ---------------
[0.5537280353372933, 0.8626945769098665, 0.728834650628058, 0.5299659043411096, 0.22635647355184096]