[Numpy-discussion] Casting to np.byte before clearing values

Nicolas P. Rougier Nicolas.Rougier at inria.fr
Mon Dec 26 06:15:25 EST 2016


Thanks for the explanation Sebastian, makes sense.

Nicolas


> On 26 Dec 2016, at 11:48, Sebastian Berg <sebastian at sipsolutions.net> wrote:
> 
> On Mo, 2016-12-26 at 10:34 +0100, Nicolas P. Rougier wrote:
>> Hi all,
>> 
>> 
>> I'm trying to understand why viewing an array as bytes before
>> clearing makes the whole operation faster.
>> I imagine there is some kind of special treatment for byte arrays but
>> I've no clue. 
>> 
> 
> Sure, if its a 1-byte width type, the code will end up calling
> `memset`. If it is not, it will end up calling a loop with:
> 
> while (N > 0) {
>     *dst = output;
>     *dst += 8;  /* or whatever element size/stride is */
>     --N;
> }
> 
> now why this gives such a difference, I don't really know, but I guess
> it is not too surprising and may depend on other things as well.
> 
> - Sebastian
> 
> 
>> 
>> # Native float
>> Z_float = np.ones(1000000, float)
>> Z_int   = np.ones(1000000, int)
>> 
>> %timeit Z_float[...] = 0
>> 1000 loops, best of 3: 361 µs per loop
>> 
>> %timeit Z_int[...] = 0
>> 1000 loops, best of 3: 366 µs per loop
>> 
>> %timeit Z_float.view(np.byte)[...] = 0
>> 1000 loops, best of 3: 267 µs per loop
>> 
>> %timeit Z_int.view(np.byte)[...] = 0
>> 1000 loops, best of 3: 266 µs per loop
>> 
>> 
>> Nicolas
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion at scipy.org
>> https://mail.scipy.org/mailman/listinfo/numpy-discussion
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> https://mail.scipy.org/mailman/listinfo/numpy-discussion




More information about the NumPy-Discussion mailing list