[Numpy-discussion] numpy.random.shuffle

Alan G Isaac aisaac at american.edu
Wed Nov 22 10:50:11 EST 2006


On Wed, 22 Nov 2006, Robert apparently wrote: 
>>>> numpy.random.shuffle(rr) 

The docstring is incomplete.  From the NumPy Book:
    shuffle (sequence)
    Randomly permute the items of any sequence. If sequence is an array, then it
    must be 1-d.

>>> rr=N.array(zip(range(20),range(20)))
>>> N.random.shuffle(rr.flat)
>>> rr
array([[ 0, 16],
       [10,  1],
       [19, 13],
       [18, 14],
       [13, 11],
       [12,  4],
       [19,  9],
       [18, 16],
       [14,  7],
       [ 5, 17],
       [ 2,  3],
       [ 9,  7],
       [12,  3],
       [ 1,  4],
       [ 8, 17],
       [ 6,  6],
       [11,  0],
       [ 5, 15],
       [10,  8],
       [ 2, 15]])

What surprised me more is that you cannot shuffle the rows 
with Python's random.shuffle either: the exact same problem 
you noted crops up!  (Works fine with a list of tuples,
of course.) But you could do:

>>> rr=N.array(zip(range(20),range(20)))
>>> pid = N.random.permutation(rr.shape[0])
>>> rr=rr[pid]
>>> rr
array([[ 9,  9],
       [ 2,  2],
       [ 3,  3],
       [15, 15],
       [ 4,  4],
       [11, 11],
       [18, 18],
       [17, 17],
       [ 5,  5],
       [12, 12],
       [13, 13],
       [ 1,  1],
       [ 8,  8],
       [14, 14],
       [16, 16],
       [19, 19],
       [ 7,  7],
       [ 6,  6],
       [10, 10],
       [ 0,  0]])

hth,
Alan Isaac






More information about the NumPy-Discussion mailing list