"flip" numpy 数组中的值?

"flip" values in numpy array?

我有一个 1 .. n 范围内的数字列表 我想 'flip' 一些号码,但它不应该重复任何现有号码。

我是这样想的:

  1. 选择要翻转的号码
  2. 翻转它们但检查它们是否重复

这是第 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 方式?


翻转意味着从一个值到另一个值的变化。 您可以将数字列表视为位数组的索引,其中数字指定位是否为 1。

所以翻转意味着每次翻转 1 => 0,从 0 => 1 翻转另一个位

在 : np.array([5,9,88,55,90,43]) 输出:np.array([5,9,46,55,21,43])

两个号改了

你可以使用套装。

s = set(xrange(0, n))

lst[ixs] = np.random.choice(s.difference(lst), 2, replace=False)

是否更高效还有待商榷,但肯定更清洁。