"flip" numpy 数组中的值?
"flip" values in numpy array?
我有一个 1 .. n 范围内的数字列表
我想 'flip' 一些号码,但它不应该重复任何现有号码。
我是这样想的:
- 选择要翻转的号码
- 翻转它们但检查它们是否重复
这是第 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)
是否更高效还有待商榷,但肯定更清洁。
我有一个 1 .. n 范围内的数字列表 我想 'flip' 一些号码,但它不应该重复任何现有号码。
我是这样想的:
- 选择要翻转的号码
- 翻转它们但检查它们是否重复
这是第 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)
是否更高效还有待商榷,但肯定更清洁。