[Numpy-discussion] Extract subset from an array

Nicola Creati ncreati at inogs.it
Wed Feb 17 02:34:06 EST 2010


Neil Crighton wrote:
> Francesc Alted <faltet <at> pytables.org> writes:
>
>   
>> In [10]: array = np.random.random((3, 10000000))
>>
>> then the time drops significantly:
>>
>> In [11]: time (array[0]>x_min) & (array[0]<x_max) & (array[1]>y_min) & 
>> (array[1]<y_max)
>> CPU times: user 0.15 s, sys: 0.01 s, total: 0.16 s
>> Wall time: 0.16 s
>> Out[12]: array([False, False, False, ..., False, False, False], dtype=bool)
>>
>> i.e. walking your arrays row-wise is around 1.7x faster in this case.
>>
>>     
>
> It saves some array creation if you use &=:
>
> In [29]: array = np.random.random((10000000, 3))
> In [30]: x_min, x_max, y_min, y_max = .3, .5, .4, .7
>
> In [31]: %timeit c = (array[:,0]>x_min) & (array[:,0]<x_max) & 
> (array[:,1]>y_min) & (array[:,1]<y_max)
> 1 loops, best of 3: 633 ms per loop
>
> In [32]: %timeit c = (array[:,0]>x_min); c &= (array[:,0]<x_max); 
> c &= (array[:,1]>y_min); c &= (array[:,1]<y_max)
> 1 loops, best of 3: 604 ms per loop
>
> Only ~5% speedup though, so not a big deal.
>
> Neil
Any kind of improvement is really appreciated.
Thank you.

Nicola




More information about the NumPy-Discussion mailing list