[Numpy-discussion] Set values of a matrix within a specified range to zero

Ryan May rmay31@gmail....
Tue Mar 30 16:35:16 CDT 2010


On Tue, Mar 30, 2010 at 3:16 PM, Friedrich Romstedt
<friedrichromstedt@gmail.com> wrote:
> 2010/3/30 Ryan May <rmay31@gmail.com>:
>> On Tue, Mar 30, 2010 at 11:12 AM, Alan G Isaac <aisaac@american.edu> wrote:
>>> On 3/30/2010 12:56 PM, Sean Mulcahy wrote:
>>>> 512x512 arrays.  I would like to set elements of the array whose value fall within a specified range to zero (eg 23<  x<  45).
>>>
>>> x[(23<x)*(x<45)]=0
>>
>> Or a version that seems a bit more obvious (doing a multiply between
>> boolean arrays to get an AND operator seems a tad odd):
>>
>> x[(23<x) & (x<45)] = 0
>
> We recently found out that it executes faster using:
>
> x *= ((x <= 23) | (x >= 45))  .

Interesting. In an ideal world, I'd love to see why exactly that is,
because I don't think multiplication should be faster than a boolean
op.  If you need speed, then by all means go for it.  But if you don't
need speed I'd use the & since that will be more obvious to the person
who ends up reading your code later and has to spend time decoding
what that line does.

Ryan

-- 
Ryan May
Graduate Research Assistant
School of Meteorology
University of Oklahoma


More information about the NumPy-Discussion mailing list