[Numpy-discussion] request for new array method: arr.abs()

Travis Oliphant oliphant.travis at ieee.org
Wed Aug 23 21:12:03 CDT 2006


Sebastian Haase wrote:
> On Wednesday 23 August 2006 18:37, Travis Oliphant wrote:
>   
>> David M. Cooke wrote:
>>     
>>> On Wed, 23 Aug 2006 16:22:52 -0700
>>>
>>> Sebastian Haase <haase at msg.ucsf.edu> wrote:
>>>       
>>>> On Wednesday 23 August 2006 16:12, Bill Baxter wrote:
>>>>         
>>>>> The thing that I find I keep forgetting is that abs() is a built-in,
>>>>> but other simple functions are not.  So it's abs(foo), but
>>>>> numpy.floor(foo) and numpy.ceil(foo).  And then there's round() which
>>>>> is a built-in but can't be used with arrays, so numpy.round_(foo).   
>>>>> Seems like it would be more consistent to just add a numpy.abs() and
>>>>> numpy.round().
>>>>>           
>>>> Regarding the original subject:
>>>> a) "absolute" is impractically too much typing and
>>>> b) I just thought some (module-) functions might be "forgotten" to be
>>>> put in as (object-) methods ... !?
>>>>         
>>> Four-line change, so I added a.abs() (three lines for array, one
>>> for MaskedArray).
>>>       
>> While I appreciate it's proactive nature, I don't like this change
>> because it adds another "ufunc" as a method.  Right now, I think conj is
>> the only other method like that.
>>
>> Instead, I like better the idea of adding abs, round, max, and min to
>> the "non-import-*" namespace of numpy.
>>
>>     
> How does this compare with
> mean, min, max, average
> ?
>   

I'm not sure what this question is asking, so I'll answer what I think 
it is asking.

The mean, min, max, and average functions are *not* ufuncs.   They are 
methods of particular ufuncs. 

The abs() should not be slow (because it calls the __abs__ method which 
for arrays is mapped to the ufunc absolute).  Thus, there is one more 
layer of indirection which will only matter for small arrays.

-Travis





More information about the Numpy-discussion mailing list