使用python对数组进行洗牌的最简单方法是什么?
答案 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()
将像前面的答案一样完成工作。
但是当它来到ndarray
(numpy.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左右。