在numpy数组中 "翻转 "数值?

问题描述 投票:-1回答:1

我有一个1范围内的数字列表......我想 "翻转 "一些数字,但它不应该重复任何现有的数字。

我想这样做。

  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方法吗?


翻转是指从一个值到另一个值的变化.你可以把数字列表看成是一个bitarray的索引,其中的数字指定位是否为1。

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

in : np.array([5,9,88,55,90,43]) out: np.array([5,9,46,55,21,43])

两个数字被改变

python numpy repeat flip
1个回答
1
投票

你可以使用集合。

s = set(xrange(0, n))

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

这是否更有效率是有争议的,但它肯定是干净的。

© www.soinside.com 2019 - 2024. All rights reserved.