使用python随机播放数组,使用python随机化数组项顺序

时间:2009-01-23 18:34:30

标签: python arrays random shuffle

使用python对数组进行洗牌的最简单方法是什么?

11 个答案:

答案 0 :(得分:416)

import random
random.shuffle(array)

答案 1 :(得分:105)

import random
random.shuffle(array)

答案 2 :(得分:27)

使用sklearn

执行此操作的替代方法
from sklearn.utils import shuffle
X=[1,2,3]
y = ['one', 'two', 'three']
X, y = shuffle(X, y, random_state=0)
print(X)
print(y)

输出:

[2, 1, 3]
['two', 'one', 'three']

优点:您可以在不中断映射的情况下同时随机连接多个阵列。并且' random_state'可以控制洗牌的可重复行为。

答案 3 :(得分:21)

其他答案是最简单的,但random.shuffle方法实际上没有返回任何内容有点烦人 - 它只是对给定列表进行排序。如果你想链接调用或只是能够在一行中声明一个混洗数组,你可以这样做:

    import random
    def my_shuffle(array):
        random.shuffle(array)
        return array

然后你可以做以下几行:

    for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):

答案 4 :(得分:11)

在处理常规Python列表时,random.shuffle()将像前面的答案一样完成工作。

但是当它来到ndarraynumpy.array)时,random.shuffle似乎打破了原来的ndarray。这是一个例子:

import random
import numpy as np
import numpy.random

a = np.array([1,2,3,4,5,6])
a.shape = (3,2)
print a
random.shuffle(a) # a will definitely be destroyed
print a

只需使用:np.random.shuffle(a)

random.shuffle一样,np.random.shuffle就地对阵列进行随机播放。

答案 5 :(得分:9)

如果你想要一个新阵列,你可以使用sample

import random
new_array = random.sample( array, len(array) )

答案 6 :(得分:2)

您可以使用随机键对数组进行排序

sorted(array, key = lambda x: random.random())

但是看起来random.shuffle(array)会更快,因为它是用C编写的

答案 7 :(得分:1)

除了之前的回复,我还想介绍另一个功能。

numpy.random.shuffle以及random.shuffle执行就地改组。但是,如果要返回一个混洗数组,numpy.random.permutation是要使用的函数。

答案 8 :(得分:0)

我不知道我使用了random.shuffle()但是它给我回了'无',所以我写了这个,可能对某人有帮助

def shuffle(arr):
    for n in range(len(arr) - 1):
        rnd = random.randint(0, (len(arr) - 1))
        val1 = arr[rnd]
        val2 = arr[rnd - 1]

        arr[rnd - 1] = val1
        arr[rnd] = val2

    return arr

答案 9 :(得分:0)

window.onload = function(){
    $('.nested:not(:has(li))').hide(); // Will not alter layout
    // $('.nested:not(:has(li))').css("display", "none"); // Will alter layout
    }

答案 10 :(得分:0)

请注意,random.shuffle()不应在多维数组上使用,因为它会引起重复。

假设您想沿数组的第一个维度随机播放数组,我们可以创建以下测试示例,

import numpy as np
x = np.zeros((10, 2, 3))

for i in range(10):
   x[i, ...] = i*np.ones((2,3))

因此,沿着第一个轴,第i个元素对应于2x3矩阵,其中所有元素都等于i。

如果我们对多维数组(即np.random.shuffle(x))使用正确的随机播放功能,则会根据需要沿第一轴对数组进行随机播放。但是,使用random.shuffle(x)将导致重复。您可以通过在改组后运行len(np.unique(x))来进行检查,这可以使np.random.shuffle()达到10(按预期),但使用random.shuffle()时只有5左右。