In [1]:
import matplotlib
import numpy as np
import scipy.linalg as la
import matplotlib.pyplot as plt
%matplotlib inline
np.random.seed(42)

In [2]:
Nx = 18
Nw = 7500
dxdw = np.random.normal(size=(Nx, Nw))
matrix = np.dot(dxdw.T, dxdw)
matrix.shape


Out[2]:
(7500, 7500)

In [3]:
vals, vecs = la.eigh(matrix, eigvals=(Nw - Nx - 2, Nw - 1))
vals.shape, vecs.shape


Out[3]:
((20,), (7500, 20))

In [4]:
# The first 2 values of vals should be zero, essentially!
print(vals)


[  9.32851713e-12   9.32851713e-12   6.86869791e+03   6.96813171e+03
   6.98775981e+03   7.10255974e+03   7.19916753e+03   7.22490611e+03
   7.30627598e+03   7.42991240e+03   7.43704074e+03   7.47959423e+03
   7.63770086e+03   7.67909183e+03   7.78475734e+03   7.81447540e+03
   7.95589041e+03   7.97880859e+03   8.06626133e+03   8.25110169e+03]

In [ ]: