[SciPy-user] what is simpliest way to create this boolean array

Stefan van der Walt stefan at sun.ac.za
Thu Aug 30 07:14:37 EDT 2007


On Thu, Aug 30, 2007 at 09:33:29PM +1200, Angus McMorland wrote:
> On 30/08/2007, dmitrey <openopt at ukr.net> wrote:
> > No, I meant a = array((True, True, ... True (m1 numbers), False,
> > False,... False(m2 numbers), True, ...(m3 numbers), False, ...(m4
> > numbers) ))
> 
> Of course, that makes more sense. A cool generic list comprehension solution is:
> 
> def make_bool(*args):
>     a = []
>     [[a.append(k) for k in [not bool((i % 2)) for y in xrange(x)]] for
> i, x in enumerate(args)]
>     return a
> 
> Still slightly faster than the numpy way (by ~25% I think).

Or with only one for-loop:

a = []
for i,x in enumerate(m):
    a.extend([i%2]*x)
return ~N.array(a,bool)

where m contains [m1,m2,m3].

Cheers
Stéfan



More information about the SciPy-User mailing list