# [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.
```