[Numpy-discussion] Data cube optimization for combination

Hanno Klemm klemm@phys.ethz...
Tue Mar 6 06:20:21 CST 2012


Hi,

this should work:

import numpy as np

ndim = 20

cube = np.random.rand(32,ndim, ndim)
result = np.zeros([ndim, ndim], np.float32)

def combine(cube, result):

     for ii in range(ndim):
         for jj in range(ndim):
             result[ii, jj] = np.sqrt((cube[:,ii, jj])).sum()
     return result

def combine2(cube, result):

     r2 = np.sqrt(cube)
     r3 = r2.sum(axis=0)
     return r3

r3 = combine2(cube,result)
r1 = combine(cube, result)

print np.allclose(r3, r1)

When I time it in ipython with ndim=20, I get:

In [8]: timeit combine2(cube, result)
1000 loops, best of 3: 246 us per loop

In [9]: timeit combine(cube, result)
100 loops, best of 3: 3.86 ms per loop



Best regards,
Hanno


Am 06.03.2012 um 13:00 schrieb Jose Miguel Ibáñez:

> Hello everyone,
>
> does anyone know of an efficient implementation (maybe using
> numpy.where statement) of the next code for data cube (3d array)
> combining ?
>
> import numpy as np
>
> def combine( )
>
>  cube = np.random.rand(32,2048,2048)
>  result = np.zeros([2048,2048], np.float32)
>
>   for ii in range(2048):
>       for jj in range(2048):
>            result[, ii, jj] = np.sqrt((cube[:,ii, jj])).sum()
>
>
> It takes long time to run, however,
>
>
>>> result = np.median(cube,0)
>
>
> only around one second ! where is the point ? any suggestions ?
>
>
>
> Thanks !
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>



More information about the NumPy-Discussion mailing list