On 12/13/2009 05:13 AM, Jasper van de Gronde wrote: > Bruce Southey wrote: > >> Really I would suggest asking the list for the real problem because it >> is often amazing what solutions have been given. >> > So far this is the fastest code I've got: > ------------------------------------------------------------------------ > import numpy as np > > nmax = 100 > > def minover(Xi,S): > P,N = Xi.shape > SXi = Xi.copy() > for i in xrange(0,P): > SXi[i] *= S[i] > SXi2 = np.dot(SXi,SXi.T) > SXiSXi2divN = np.concatenate((SXi,SXi2),axis=1)/N > w = np.random.standard_normal((N)) > E = np.dot(SXi,w) > wE = np.concatenate((w,E)) > for s in xrange(0,nmax*P): > mu = wE[N:].argmin() > wE += SXiSXi2divN[mu] > # E' = dot(SXi,w') > # = dot(SXi,w + SXi[mu,:]/N) > # = dot(SXi,w) + dot(SXi,SXi[mu,:])/N > # = E + dot(SXi,SXi.T)[:,mu]/N > # = E + dot(SXi,SXi.T)[mu,:]/N > return wE[:N] > ------------------------------------------------------------------------ > > I am particularly interested in cleaning up the initialization part, but > any suggestions for improving the overall performance are of course > appreciated. > > What is Xi and S? I think that your SXi is just: SXi=Xi*S
But really I do not understand what you are actually trying to do. As previously indicated, some times simplifying an algorithm can make it computationally slower. Bruce _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion