[SciPy-user] what is simpliest way to create this boolean array
Stefan van der Walt
stefan at sun.ac.za
Thu Aug 30 07:21:41 EDT 2007
On Thu, Aug 30, 2007 at 01:14:37PM +0200, Stefan van der Walt wrote:
> 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].
Or without any for-loops!
x = N.ones(len(m),bool)
x[1::2] = False
x.repeat(m)
Cheers
Stéfan
More information about the SciPy-User
mailing list