在python数组中随机播放“耦合”元素

时间:2017-09-08 13:08:11

标签: python arrays

假设我有这个数组:

np.arange(9)

[0 1 2 3 4 5 6 7 8]

我想用np.random.shuffle对元素进行随机播放,但某些数字必须按原始顺序排列。

我希望0,1,2有原始订单。 我希望3,4,5有原始订单。 我希望6,7,8有原始顺序。

数组中元素的数量是3的倍数。

例如,一些可能的输出将是:

[ 3 4 5 0 1 2 6 7 8]
[ 0 1 2 6 7 8 3 4 5]

但是这个:

[2 1 0 3 4 5 6 7 8]

无效,因为0,1,2不是原始顺序

我认为zip()可能在这里有用,但我不确定。

2 个答案:

答案 0 :(得分:1)

天真的方法:

num_indices = len(array_to_shuffle) // 3 # use normal / in python 2
indices = np.arange(num_indices)
np.random.shuffle(indices)
tmp = array_to_shuffle.reshape([-1,3])
tmp = tmp[indices,:]
tmp.reshape([-1])

更快(更清洁)的选择:

{{1}}

答案 1 :(得分:1)

使用numpy.random.shufflenumpy.ndarray.flatten函数的简短解决方案:

arr = np.arange(9)
arr_reshaped = arr.reshape((3,3))   # reshaping the input array to size 3x3
np.random.shuffle(arr_reshaped)
result = arr_reshaped.flatten()

print(result)

可能的随机结果之一:

[3 4 5 0 1 2 6 7 8]