#! /usr/bin/env python import numpy as np import argparse from matplotlib import pyplot as plt from matplotlib import animation def setup_data(args): """ Define a set of sample data """ x = np.linspace(0,1,args.n) lam = np.random.normal(0, args.s, args.n) y = 2 + 3*x + lam return x,y def test(args): # initialize firs state x_data,y_data = setup_data(args) testdata = np.transpose(np.array([x_data,y_data])) #testdata = np.array([x_data,y_data]) U, s, V = np.linalg.svd(testdata, full_matrices=True, compute_uv=True) print U.shape print s.shape print V.shape S = np.diag(s) #A = np.dot(np.dot(U, S), np.transpose(V)) Asum = np.zeros(len(x_data)) print U.shape print S.shape print V.shape print np.diag(1/s) #Ainv = np.dot(V.dot(np.diag(1/S)), np.transpose(U)) #Ainv = np.dot(V.dot(np.linalg.pinv(S)), np.transpose(U)) #Anew = np.dot(V.dot(np.linalg.pinv(S)), np.transpose(U)) #xnew = (np.linalg.pinv(A)*x_data) #xnew = A[:,0]*x_data xnew = np.dot(np.dot(V, (np.diag(1/s))), np.dot(np.transpose(U), x_data)) print xnew.shape #print Ainv.shape #print A.shape test = np.dot(U, S) #xnew = np.transpose(Ainv*x_data) #xnew = np.linalg.pinv(A)*x_data #xnew = Ainv.dot(x_data) fig = plt.figure() error = np.zeros(len(y_data)) #for ix in range(len(y_data)): # error = error + (V**2)/(s**2) def animate(i): plotimage = plt.imshow(n_stepped[i], interpolation="none") #anim = animation.FuncAnimation(fig, animate, # frames=len(n_stepped), interval=20, blit=False) #anim.save('test.gif', writer='imagemagick', fps=5) #anim.save('test.mp4', writer='ffmpeg', fps=5) plt.plot(x_data,y_data, x_data, np.transpose(xnew)) plt.show() if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("-n", "--n", type=int, default=100, help="number of points") parser.add_argument("-s", "--s", type=int, default=0.5, help="standard deviation") args = parser.parse_args() test(args)