filtering numeric arrays
Lukasz Pankowski
lupan at zamek.gda.pl
Mon Mar 3 11:57:37 EST 2003
"Marie-Claude Savoie" <marie-claude.savoie at sympatico.ca> writes:
> Hi All,
>
> I have an 2D numeric array of x,y points eg [(1,3),(2,4),(5,6)] and I would
> like to remove all the points in the array that don't meet the min/max point
> criteria. I will have several thousand points. With lists I can do it like
>
> [(x,y) for x,y in seq if xMin < x <xMax and yMin< y <yMax]
>
> How do I get the same functionality and better speed using numeric. I have
> tried a bunch of things using compress and take but I am running up against
> a brick wall.
>
> Any ideas?
>
> Thanks
>
> Gordon Williams
>
>
>
Tested only for your example array :-), but should work:
from Numeric import *
# [(x,y) for x,y in seq if xMin < x <xMax and yMin< y <yMax]
a = array([(1,3),(2,4),(5,6)])
def filter_range(a, xMin, xMax, yMin, yMax):
cc = greater(a, [xMin, yMin])
cond = logical_and(cc[:,0], cc[:,1])
less(a, [xMax, yMax], cc)
logical_and(cond, cc[:,0], cond)
logical_and(cond, cc[:,1], cond)
return compress(cond, a, 0)
print filter_range(a, 0, 3, 3, 10)
print filter_range(a, 0, 7, 3, 10)
print filter_range(a, 0, 3, 0, 10)
--
=*= Lukasz Pankowski =*=
t o t f s h i m o f p h t s s w
h n h i a o s o f o r o o a o i
e e a r i p t o o p y m s
t s d e h l b e e e
t e s a d t
r b h
l i
y n
g
More information about the Python-list
mailing list