[Numpy-discussion] Slicing slower than matrix multiplication?
Bruce Southey
bsouthey@gmail....
Mon Dec 14 09:01:32 CST 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