我想对1-d numpy数组进行洗牌,其约束是没有元素与另一个具有相同形状的数组中的对应元素(即,相同的索引)匹配。可以假定每个数组的所有元素都是唯一的。
例如,
a = np.arange(10)
b = a.copy()
np.random.shuffle(b)
np.where(a==b) # This should be empty
最好的方法是什么?有任何想法吗?
从乔治的回答改编这里
def random_derangement(n):
while True:
v = np.arange(n)
for j in np.arange(n - 1, -1, -1):
p = np.random.randint(0, j+1)
if v[p] == j:
break
else:
v[j], v[p] = v[p], v[j]
else:
if v[0] != 0:
return v
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句