[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