On Tue, Feb 10, 2009 at 12:18 PM, Keith Goodman <kwgood...@gmail.com> wrote: > On Tue, Feb 10, 2009 at 11:29 AM, Mark Janikas <mjani...@esri.com> wrote: >> I want to create an array that contains a column of permutations for each >> simulation: >> >> import numpy as NUM >> >> import numpy.random as RAND >> >> x = NUM.arange(4.) >> >> res = NUM.zeros((4,100)) >> >> >> for sim in range(100): >> >> res[:,sim] = RAND.permutation(x) >> >> >> Is there a way to do this without a loop? Thanks so much ahead of time… > > Does this work? Might not be faster but it does avoid the loop. > > import numpy as np > > def weirdshuffle(nx, ny): > x = np.ones((nx,ny)).cumsum(0, dtype=np.int) - 1 > yidx = np.ones((nx,ny)).cumsum(1, dtype=np.int) - 1 > xidx = np.random.rand(nx,ny).argsort(0).argsort(0) > return x[xidx, yidx]
Hey, it is faster for nx=4, ny=100 def baseshuffle(nx, ny): x = np.arange(nx) res = np.zeros((nx,ny)) for sim in range(ny): res[:,sim] = np.random.permutation(x) return res >> timeit baseshuffle(4,100) 1000 loops, best of 3: 1.11 ms per loop >> timeit weirdshuffle(4,100) 10000 loops, best of 3: 127 µs per loop OK, who can cut that time in half? My first try looks clunky. _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion