这是我在开发一些东西时遇到的一个问题,这是一个很难表达的问题。所以最好用一个简单的例子:
假设您有4个随机数生成器,它们生成一个大小为4的数组:
[rng-0, rng-1, rng-2, rng-3]
| | | |
[val0, val1, val2, val3]我们的目标是遍历由这些RNGs填充的“代”数组,并迭代地屏蔽输出最大值的RNG。
因此,一个例子可能会从以下几个方面开始:
mask = [False, False, False, False], arr = [0, 10, 1, 3],所以我们会屏蔽rng-1。
然后,下一个迭代可能是:mask = [False, True, False, False], arr = [2, 1, 9] (在被问到之前,yes 必须缩小大小,每一个rng都屏蔽了)。在这种情况下,显然应该屏蔽rng-3 (例如mask[3] = True),但是由于arr现在的大小与mask不同,所以很难为设置掩码找到正确的索引(因为arr的最大值在arr的索引2,而相应的生成器是索引3)。随着更多的发电机被屏蔽,这个问题变得越来越困难(在我的例子中,我正在处理一个大小为30的面具)。
如果有帮助,下面是示例的python版本:
rng = np.random.RandomState(42)
mask = np.zeros(10, dtype=bool) # True if generator is being masked
for _ in range(mask.size):
arr = rng.randint(100, size=~mask.sum())
unadjusted_max_value_idx = arr.argmax()
adjusted_max_value_idx = unadjusted_max_value_idx + ????
mask[adjusted_max_value_idx] = True有什么好办法可以将arr中的最大值的索引映射到掩码中的相应索引吗?(即从unadjusted_max_value_idx迁移到adjusted_max_value_idx)
发布于 2021-01-12 19:11:23
#use a helper list
rng = np.random.RandomState(42)
mask = np.zeros(10, dtype=bool) # True if generator is being masked
ndxLst=list(range(mask.size))
maskHistory=[]
for _ in range(mask.size):
arr = rng.randint(100, size=(~mask).sum())
unadjusted_max_value_idx = arr.argmax()
adjusted_max_value_idx=ndxLst.pop(unadjusted_max_value_idx)
mask[adjusted_max_value_idx] = True
maskHistory.append(adjusted_max_value_idx)
print(maskHistory)
print(mask)https://stackoverflow.com/questions/65689853
复制相似问题