[Numpy-discussion] Slicing slower than matrix multiplication?

Jasper van de Gronde th.v.d.gronde@hccnet...
Sun Dec 13 05:13:11 CST 2009


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.


More information about the NumPy-Discussion mailing list