[Numpy-discussion] Slicing slower than matrix multiplication?

Bruce Southey bsouthey at gmail.com
Mon Dec 14 10:01:32 EST 2009


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







More information about the NumPy-Discussion mailing list