Home > Enterprise >  Square Matrix in Python with values -1 or 0 or 1
Square Matrix in Python with values -1 or 0 or 1

Time:10-16

I'm trying to generate a square matrix that only contains the values -1 or 0 or 1 but no other values. The matrix is used as a relationship matrix for a genetic algorithm project that I am working on. The diagonal has to be all zeros.

So far I have tried this:

import numpy as np

n = 5

M = []
for i in range(n):
   disc = random.random()
      if disc <= 0.33:
           M.append(-1)
      elif disc > 0.33 and disc <= 0.66:
           M.append(0)
      else:
           M.append(1)
                    
                    
RelMat = np.array(M).reshape(int(sqrt(n)),-1)
np.fill_diagonal(RelMat, 0)

This will yield me a matrix with all three values but it won't allow me to make it symmetrical. I have tried to multiply it with its transpose but then the values are not correct anymore.

I have also tried to get it to work with:

import numpy as np

N = 5
b = np.random.random_integers(-1,2,size=(N,N))
b_symm = (b   b.T)/2

but this will give me 0.5 as values in the matrix which pose a problem.

My main issues is the symmetry of the matrix and the condition that the matrix has to contain all three numbers. Any help is appreciated.

CodePudding user response:

numpy.triu returns the upper triangular portion of the matrix (it sets elements below the k-th diagonal to 0). You could also zero the main diagonal too in that same call (to avoid calling fill_diagonal).

After that b b.T should give you a symmetric matrix with the desired values.

  • Related