随机播放2D数组

时间:2017-05-09 14:43:07

标签: python arrays numpy random shuffle

我试图改组2D数组,我遇到了一些stange行为,可以使用以下代码恢复:

import random
import numpy

a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
random.shuffle(a)
print 'With rand\n', a

a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
numpy.random.shuffle(a)
print 'With numpy\n', a

输出

With rand
[[1 2 3]
 [1 2 3]
 [1 2 3]]
With numpy
[[4 5 6]
 [7 8 9]
 [1 2 3]]

正如您所看到的,使用random库(我的第一次尝试),它似乎覆盖了元素(或其他东西,我真的不明白这里发生了什么),因此不会执行重排。 但是对于numpy库,它可以很好地工作。

任何人都可以解释为什么吗?即这种差异来自哪里?如果可能的话,random.shuffle函数对2D数组的作用是什么? 谢谢,

2 个答案:

答案 0 :(得分:0)

Y-m-d h:i:s旨在与random.shuffle合作,而不是list。基本上,当您使用arrayrandom.shufflelist时,您应该使用np.random.shuffle

array

答案 1 :(得分:0)

检查random源代码..

https://svn.python.org/projects/stackless/trunk/Lib/random.py

def shuffle(self, x, random=None, int=int):
    """x, random=random.random -> shuffle list x in place; return None.

    Optional arg random is a 0-argument function returning a random
    float in [0.0, 1.0); by default, the standard random.random.
    """

    if random is None:
        random = self.random
    for i in reversed(xrange(1, len(x))):
        # pick an element in x[:i+1] with which to exchange x[i]
        j = int(random() * (i+1))
        x[i], x[j] = x[j], x[i]

你看到的最后一行:让shuffle失败,因为numpy以某种方式执行最后一行部分 ,但python列表完全执行它..