Home > Net >  Is it possible to have a covariance matrix without inverse using numpy?
Is it possible to have a covariance matrix without inverse using numpy?

Time:01-19

I have the following problem: I need the inverse of the covariance matrix using the following data:

x = [255, 239, 213]

y = [255, 240, 245]

I get the following covariance matrix using numpy.cov()

cov_matrix = np.cov(np.array([[255.0, 255.0], [239.0, 240.0], [213.0, 245.0]]))

Then, when I use numpu.linalg.inv() I get this error

inv_matrix = np.linalg.inv(cov_matrix)

LinAlgError: Singular matrix

How is it possible?

CodePudding user response:

You are computing cov_matrix in the wrong way. Assuming you have 3 observation for two different variables x and y:

x = [255, 239, 213]
y = [255, 240, 245]

cov_matrix = np.cov(x, y)
#array([[449.33333333,  88.33333333],
#       [ 88.33333333,  58.33333333]])

inv_matrix = np.linalg.inv(cov_matrix)
#array([[ 0.00316885, -0.00479855],
#       [-0.00479855,  0.02440923]])

In case your x and your y are instead two observations on a 3D space, you are computing cov_matrix in the right way, but you'll have a zero-variance variable (the first one), since var[(255,255)]=0 and this produces a zero-determinant covariance matrix, as @Jasper Row has already said.

  • Related