Could anyone tell me the efficient way to do this? Extracting values
from an array for a single condition (say all values greater than 'x')
using 'where' and 'compress' is simple enough.
[color=blue][color=green][color=darkred]
>>> from Numeric import arange,where,co mpress
>>> data= arange(10)
>>> data= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> mask= where((data > 3),1,0)
>>> result= compress(mask,d ata)
>>> result[/color][/color][/color]
array([4, 5, 6, 7, 8, 9])
But, 'where' doesn't appear to allow for multiple conditions in one
statement. For instance, I'd like to do something like:
mask= where((3 < data <= 7),1,0)
but, this won't work.
So, the best I could come up with was this more complicated process that
requires 2 separate masks and an extra temporary array.
[color=blue][color=green][color=darkred]
>>> mask1= where((data > 3),data,0)
>>> mask1[/color][/color][/color]
array([0, 0, 0, 0, 4, 5, 6, 7, 8, 9])[color=blue][color=green][color=darkred]
>>> mask2= where((mask1<= 7),mask1,0)
>>> mask2[/color][/color][/color]
array([0, 0, 0, 0, 4, 5, 6, 7, 0, 0])[color=blue][color=green][color=darkred]
>>> r= compress(mask2, data)
>>> r[/color][/color][/color]
array([4, 5, 6, 7])
Is there a more concise way?
Thanks,
J.S.
from an array for a single condition (say all values greater than 'x')
using 'where' and 'compress' is simple enough.
[color=blue][color=green][color=darkred]
>>> from Numeric import arange,where,co mpress
>>> data= arange(10)
>>> data= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> mask= where((data > 3),1,0)
>>> result= compress(mask,d ata)
>>> result[/color][/color][/color]
array([4, 5, 6, 7, 8, 9])
But, 'where' doesn't appear to allow for multiple conditions in one
statement. For instance, I'd like to do something like:
mask= where((3 < data <= 7),1,0)
but, this won't work.
So, the best I could come up with was this more complicated process that
requires 2 separate masks and an extra temporary array.
[color=blue][color=green][color=darkred]
>>> mask1= where((data > 3),data,0)
>>> mask1[/color][/color][/color]
array([0, 0, 0, 0, 4, 5, 6, 7, 8, 9])[color=blue][color=green][color=darkred]
>>> mask2= where((mask1<= 7),mask1,0)
>>> mask2[/color][/color][/color]
array([0, 0, 0, 0, 4, 5, 6, 7, 0, 0])[color=blue][color=green][color=darkred]
>>> r= compress(mask2, data)
>>> r[/color][/color][/color]
array([4, 5, 6, 7])
Is there a more concise way?
Thanks,
J.S.
Comment