我知道如何生成数字列表的随机序列。这是一个例子:
lst = np.arange(10) #lst always 0 .. n
np.shuffle(lst)
问题是如何对数字进行随机排列,使得数字ONE不在位置ONE,2不在位置2,并且通常x不在位置x。对于所有0 .. n。
初始序列始终为0 .. n,其中n将为数百,100或200或300。
看了一下线程......洗牌方法似乎无法使用,太慢了。 这是我目前的实验,到目前为止似乎有效:
def swap(ary,pos):
new_pos = np.random.randint(pos+1, len(ary))
tmp = ary[pos]
ary[pos] = ary[new_pos]
ary[new_pos] = tmp
#print "%s <=> %s" % (pos, new_pos)
def derange(n):
lst = np.arange(n)
for i in np.arange(n-1) : swap(lst, i)
return lst