假设我有这个数组:
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()
可能在这里有用,但我不确定。
答案 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.shuffle
和numpy.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]