我有这个数组:
arr=[[1,1,1],[0,0,0],[0,0,0]
我希望 1 随机分布在第二行、第三行和第一行。
例如,想要的结果是:
arr=[[1,1,0],[0,0,0],[0,1,0] or arr=[[1,0,0],[0,0,1],[0,1,0]
但是,使用
np.random.shuffle(arr)
结果是打乱行而不是元素。
请您参考如下方法:
用一个例子扩展我的评论,利用 itertools.chain和 random.shuffle - 因为 Lucas 已经提供了 numpy 解决方案:
import random
from itertools import chain
arr=[[1,1,0],[0,0,0],[0,1,0]]
# make it a 1-dim list
chained = list(chain.from_iterable(arr))
# shuffle it
random.shuffle(chained)
# repartition it again
new = [chained[i:i+3] for i in range(0,9,3)]
print(new)
输出(多次尝试):
[[0, 0, 1], [0, 0, 1], [1, 0, 0]]
[[1, 0, 0], [1, 1, 0], [0, 0, 0]]
[[0, 0, 0], [1, 0, 0], [0, 1, 1]]
[[0, 0, 1], [0, 0, 0], [1, 0, 1]]
[[0, 0, 0], [0, 0, 1], [0, 1, 1]]
