On Tue, Feb 10, 2009 at 12:18 PM, Keith Goodman <[email protected]> wrote:
> On Tue, Feb 10, 2009 at 11:29 AM, Mark Janikas <[email protected]> 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
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion