[英]“flip” values in numpy array?
我有一个 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 方式吗?
翻转意味着从一个值变为另一个值。 您可以将数字列表视为位数组的索引,其中数字指定位是否为 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)
如果它更有效,这是有争议的,但它肯定更清洁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.