我有一个1范围内的数字列表......我想 "翻转 "一些数字,但它不应该重复任何现有的数字。
我想这样做。
这里是步骤1。
lst = np.array([5,9,88,55,90,43])
In [95]: z = np.random.choice(lst, 2,replace=False)
Out[95]: array([ 9, 43])
ixs = np.where(lst == z)[0]
#does not guarantee that the new numbers are not already in lst!
lst[ixs] = np.random.choice(xrange(0,n),2,replace=False)
现在我如何确保新的随机数不重复而不在循环中做检查。
有其他的numpy方法吗?
翻转是指从一个值到另一个值的变化.你可以把数字列表看成是一个bitarray的索引,其中的数字指定位是否为1。
所以翻转意味着每翻转一次1 => 0,就从0 => 1中翻转一个位。
in : np.array([5,9,88,55,90,43]) out: np.array([5,9,46,55,21,43])
两个数字被改变
你可以使用集合。
s = set(xrange(0, n))
lst[ixs] = np.random.choice(s.difference(lst), 2, replace=False)
这是否更有效率是有争议的,但它肯定是干净的。