On 23/04/07, Pierre GM <[EMAIL PROTECTED]> wrote:

> Have you tried nonzero() ?
>
> a[a<0] = numpy.random.normal(0,1)
>
> will put a random number from the normal distribution where your initial a is
> negative. No Python loops needed, no Python temps.

When you say "no python temps" I guess you mean, no temporary
*variables*? If I understand correctly, this allocates a temporary
boolean array to hold the result of "a<0".

> The double condition (0<a<1) is not legit. You should try
> logical.and(a>0,a<1)
> or
> (a>0) & (a<1)
>
> Note the () around each condition in case #2.

This is an unfortunate limitation that comes from the fact that we
can't override the behaviour of python's logical operations. a<b<c
does the right thing for python scalars, but it does it by being
expanded to (approximately) "a<b and b<c", and "and" doesn't do the
right thing for arrays. The best we can do is override the bitwise
operators for boolean arrays. This is a shame as I often want to
select array elements that fall into a given range, and creating three
temporary arrays instead of one is unpleasant.

Anne
_______________________________________________
Numpy-discussion mailing list
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to