[Numpy-discussion] Interesting timing results

Colin J. Williams cjw at sympatico.ca
Fri Jan 20 07:40:02 EST 2006


Travis Oliphant wrote:

> Sasha wrote:
>
>> On 1/17/06, Travis Oliphant <oliphant.travis at ieee.org> wrote:
>>  
>>
>>> ...                        Currently all array scalar math goes 
>>> through the
>>> entire ufunc machinery.  This is clearly sub-optimal.   It is the 
>>> reason
>>> for the scalarmath module that I've started in the src directory.
>>> Eventually, we should be able to have scalar math as fast as Python
>>> scalars.
>>>   
>>
>>
>> I have implemented "nonzero", &, | and ^ for scalar bools. (See
>> http://projects.scipy.org/scipy/numpy/changeset/1946). Here are the
>> timings:
>>
>> Before:
>>  
>>
>>> python -m timeit -s "from numpy import bool_; x = bool_(0)" "x & x"
>>>   
>>
>> 100000 loops, best of 3: 3.85 usec per loop
>>
>> Now:
>>  
>>
>>> python -m timeit -s "from numpy import bool_; x = bool_(0)" "x & x"
>>>   
>>
>> 10000000 loops, best of 3: 0.174 usec per loop
>>
>> This is close to python bool:
>>  
>>
>>> python -m timeit -s "x = bool(0)" "x & x"
>>>   
>>
>> 10000000 loops, best of 3: 0.142 usec per loop
>>
>> and faster than python int:
>>  
>>
>>> python -m timeit -s "from numpy import bool_; x = 0" "x & x"
>>>   
>>
>> 10000000 loops, best of 3: 0.199 usec per loop
>>
>> But it is in fact all within the timing error now.
>>
>> I did not put it in the scalarmath module for two reasons: first,
>> scalarmath is not hooked to numpy yet and second because C-API does
>> not provide access to scalar bools yet.  I have posted a proposal for
>> C-API changes and did not hear any opposition (well, no support
>> either), so I will implement that soon.
>>
>> There are a few issues with the new APIs that I proposed.  First is a
>> simple one: I proposed to expose boolean scalars as named constants to
>> Python, the question is
>> how to call them.
>>
>> 1. True_ and False_
>>  
>>
> +1

Why not True and False?
 >>> type(True)
<type 'bool'>
 >>>
Colin W.

>
>> 2. true and false
>>  
>>
> -1
>
>> The second issue is whether to add new numbers to _ARRAY_API or add a
>> separate _ARRAY_SCALAR_API .
>>  
>>
> No separate _SCALAR_API....
>
>> I've only optimized scalar-scalar case in binary ops and fall back to
>> old for everything else.  I would like to optimize scalar-array and
>> array-scalar cases as well, but I wonder if it is apropriate to make
>> "(bool_(0) | x) is x" true when x is an array. Alternatively 
>> (bool_(0) | x)  can become a new array that shares data with x.
>>  
>>
> Other operations with scalars return a new array.  The fact that this 
> would be different would probably be a bad thing in the end.    So, I 
> vote for returning a new copy of the data...
>
> -Travis
>
>
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc. Do you grep through log 
> files
> for problems?  Stop!  Download the new AJAX search engine that makes
> searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/numpy-discussion
>





More information about the NumPy-Discussion mailing list