On 07/07/07, Mark.Miller <[EMAIL PROTECTED]> wrote: > A quick question for the group. I'm working with some code to generate > some arrays of random numbers. The random numbers, however, need to > meet certain criteria. So for the moment, I have things that look like > this (code is just an abstraction): > > import numpy > normal=numpy.random.normal > > RNDarray = normal(25,15,(50,50)) > tmp1 = (RNDarray < 0) | (RNDarray > 25) > while tmp1.any(): > print tmp1.size, tmp1.shape, tmp1[tmp1].size > RNDarray[tmp1] = normal(5,3, size = RNDarray[tmp1].size) > tmp1 = (RNDarray < 0) | (RNDarray > 25) > > This code works well. However, it might be considered inefficient > because, for each iteration of the while loop, all values get > reevaluated even if they have previously met the criteria encapsulated > in tmp1. It would be better if, for each cycle of the while loop, only > those elements that have previously not met criteria get reevaluated.
You can write a quick recursive function to do it: In [33]: def gen_condition(n): ....: A = normal(size=n) ....: c = abs(A)>1 ....: subn = sum(c) ....: if subn>0: ....: A[c] = gen_condition(subn) ....: return A ....: Probably not ideal if it's going to take many tries, but it's pretty clear. Anne _______________________________________________ Numpy-discussion mailing list [email protected] http://projects.scipy.org/mailman/listinfo/numpy-discussion
