Shuffle a numpy array

前端 未结 3 1405
一向
一向 2021-01-11 09:31

I have a 2-d numpy array that I would like to shuffle. Is the best way to reshape it to 1-d, shuffle and reshape again to 2-d or is it possible to shuffle without reshaping?

相关标签:
3条回答
  • 2021-01-11 10:04

    You could shuffle a.flat:

    >>> np.random.shuffle(a.flat)
    >>> a
    array([[6, 1, 2],
           [3, 5, 0],
           [7, 8, 4]])
    
    0 讨论(0)
  • 2021-01-11 10:08

    You can tell np.random.shuffle to act on the flattened version:

    >>> a = np.arange(9).reshape((3,3))
    >>> a
    array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
    >>> np.random.shuffle(a.flat)
    >>> a
    array([[3, 5, 8],
           [7, 6, 2],
           [1, 4, 0]])
    
    0 讨论(0)
  • 2021-01-11 10:21

    I think this is very important to note.
    You can use random.shuffle(a) if a is 1-D numpy array. If it is N-D (where N > 2) than

    random.shuffle(a)

    will spoil your data and return some random thing. As you can see here:

    import random
    import numpy as np
    a=np.arange(9).reshape((3,3))
    random.shuffle(a)
    print a
    
    [[0 1 2]
     [3 4 5]
     [3 4 5]]
    

    This is a known bug (or feature?) of numpy.

    So, use only numpy.random.shuffle(a) for numpy arrays.

    0 讨论(0)
提交回复
热议问题