Answers:
import random
random.shuffle(array)
使用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”可以控制改组以实现可重现的行为。
其他答案最简单,但是令人讨厌的是该random.shuffle
方法实际上不返回任何内容,它只是对给定列表进行排序。如果要链接调用,或者只想在一行中声明一个改组数组,则可以执行以下操作:
import random
def my_shuffle(array):
random.shuffle(array)
return array
然后,您可以执行以下操作:
for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
当处理常规的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
就地调整数组的位置。
您可以使用随机键对数组进行排序
sorted(array, key = lambda x: random.random())
密钥只能读取一次,因此排序期间的比较项目仍然有效。
但是看起来好像random.shuffle(array)
会更快,因为它是用C编写的
array
我的意思了 Random
,即在:元素lambda
的random.random()
可能会产生新的Random
每次类实例。我实际上不确定:java
这样做是错误的方式:您应该创建一个Random rng = Random()
然后调用rng.nextGaussian()
。但不确定python的random.random()
工作方式
我不知道我曾经用过,random.shuffle()
但是它返回“ None”给我,所以我写了这个,可能对某人有帮助
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
请注意,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))
在改组后运行来检查此问题,使用时可以得到10(按预期),np.random.shuffle()
但使用时只有5 random.shuffle()
。