def wrtUSV(filename,BB,ss,nm=20): fV=open(filename+'_V'+pl,'w');fF=open(filename+'_F'+pl,'w') fS=open(filename+'_S'+pl,'w');fU=open(filename+'_U'+pl,'w') fS.write('* INDEX S\n$ %le %le\n') BB=(BB-average(BB,0))/sqrt(len(BB)) U,S,V = svd(BB,full_matrices=0) if nm>len(V): nm=len(V); print '# of modes =',nm F=abs(fftt(U,axis=0));F0=arange(len(F))/1.0/len(F) fV.write('* S ');fF.write('* INDEX '); for j in range(1,nm+1): fV.write('MOD_'+str(j)+' ') for j in range(1,nm+1): fF.write('MOD_'+str(j)+' ') fV.write('\n$ %le ');fF.write('\n$ %le ') for j in range(1,nm+1): fV.write('%le ') for j in range(1,nm+1): fF.write('%le ') fV.write('\n'); fF.write('\n') for k in range(len(ss)): fV.write(str(ss[k])+' ') for j in range(nm):fV.write(str(V[j,k])+' ') fV.write('\n') for k in range(len(F)): fF.write(str(F0[k])+' ') for j in range(nm):fF.write(str(F[k,j])+' ') fF.write('\n') for k in range(len(U)): fU.write(str(k)+' ') for j in range(nm):fU.write(str(U[k,j])+' ') fU.write('\n') for j in range(len(S)): fS.write(str(j)+' '+str(S[j])+'\n') fV.close();fF.close();fS.close();fU.close() return U,S,V,F
def wUSV(filename,BB,ss,nm=4): fV=open(filename+'_V','w');fF=open(filename+'_F','w') fS=open(filename+'_S','w');fS.write('* INDEX S\n$ %le %le\n') BB=(BB-average(BB,0))/sqrt(len(BB)) U,S,V = svd(BB,full_matrices=0) if nm>len(U): nm=len(U); #print '# of modes =',nm F=abs(rfft(U,axis=0));F0=arange(len(F))/2.0/len(F) fV.write('* S ');fF.write('* INDEX '); for j in range(1,nm+1): fV.write('MOD_'+str(j)+' ') for j in range(1,nm+1): fF.write('MOD_'+str(j)+' ') fV.write('\n$ %le ');fF.write('\n$ %le ') for j in range(1,nm+1): fV.write('%le ') for j in range(1,nm+1): fF.write('%le ') fV.write('\n'); fF.write('\n') for k in range(len(ss)): fV.write(str(ss[k])+' ') for j in range(nm):fV.write(str(V[j,k])+' ') fV.write('\n') for k in range(len(F)): fF.write(str(F0[k])+' ') for j in range(nm):fF.write(str(F[k,j])+' ') fF.write('\n') for j in range(len(S)): fS.write(str(j)+' '+str(S[j])+'\n') fV.close();fF.close();fS.close()
def fmodXY(BB,m1=0,m2=1,m3=2,m4=4,tol=10.0): BB=(BB-average(BB,0))/sqrt(len(BB)) U,S,V = svd(BB,full_matrices=0);F=abs(fftt(U,axis=0)) if S[m1]/S[m2]>tol or S[m3]/S[m4]>tol: print "warning: singular vals are very different" S=take(S,[m1,m2,m3,m4]);U=take(U,[m1,m2,m3,m4],1) V=tp(take(V,[m1,m2,m3,m4],0));F=take(F,[m1,m2,m3,m4],1) return U,S,V,F
def fmod(BB,m1=0,m2=1,m3=2,m4=3,tol=10.0): BB=(BB-average(BB,0))/sqrt(len(BB)) U,S,V = svd(BB,full_matrices=0) if S[m1]/S[m2]>tol: print "warning: singular vals are very different" S=take(S,[m1,m2,m3,m4]);U=take(U,[m1,m2,m3,m4],1) V=tp(take(V,[m1,m2,m3,m4],0)) return U,S,V
def fmodXY(BB,m1=0,m2=1,m3=2,m4=4,tol=10.0): BB=(BB-average(BB,0))/sqrt(len(BB)) U,S,V = svd(BB,full_matrices=0) if S[m1]/S[m2]>tol or S[m3]/S[m4]>tol: print "warning: singular vals are very different" S=take(S,[m1,m2,m3,m4]);U=take(U,[m1,m2,m3,m4],1) V=tp(take(V,[m1,m2,m3,m4],0)) return U,S,V
def noiseold(BB, level=20): # --older way w/o subtracting C.orbit U, S, V = svd(BB) S[:level] = 0.0 Sigma = zeros_like(BB) n = min(BB.shape) Sigma[:n, :n] = diag(S) BN = dot(U, dot(Sigma, V)) nrms = sqrt(sum(BN ** 2, 0) / len(BN)) return nrms
def wrtUSV(filename, BB, ss, nm=20): fV = open(filename + "_V" + pl, "w") fF = open(filename + "_F" + pl, "w") fS = open(filename + "_S" + pl, "w") fU = open(filename + "_U" + pl, "w") fS.write("* INDEX S\n$ %le %le\n") BB = (BB - average(BB, 0)) / sqrt(len(BB)) U, S, V = svd(BB, full_matrices=0) if nm > len(V): nm = len(V) print "# of modes =", nm F = abs(fftt(U, axis=0)) F0 = arange(len(F)) / 1.0 / len(F) fV.write("* S ") fF.write("* INDEX ") for j in range(1, nm + 1): fV.write("MOD_" + str(j) + " ") for j in range(1, nm + 1): fF.write("MOD_" + str(j) + " ") fV.write("\n$ %le ") fF.write("\n$ %le ") for j in range(1, nm + 1): fV.write("%le ") for j in range(1, nm + 1): fF.write("%le ") fV.write("\n") fF.write("\n") for k in range(len(ss)): fV.write(str(ss[k]) + " ") for j in range(nm): fV.write(str(V[j, k]) + " ") fV.write("\n") for k in range(len(F)): fF.write(str(F0[k]) + " ") for j in range(nm): fF.write(str(F[k, j]) + " ") fF.write("\n") for k in range(len(U)): fU.write(str(k) + " ") for j in range(nm): fU.write(str(U[k, j]) + " ") fU.write("\n") for j in range(len(S)): fS.write(str(j) + " " + str(S[j]) + "\n") fV.close() fF.close() fS.close() fU.close() return U, S, V, F
def noise(BB,level=5): U,S,V = svd(BB);S[:level]=0.0 Sigma=zeros_like(BB);n=min(BB.shape);Sigma[:n,:n]=diag(S) BN=dot(U,dot(Sigma,V)) nrms=sqrt(sum(BN**2,0)/len(BN)) return nrms