gpt4 book ai didi

python - numpy 掩码数组限制掩码值的频率

转载 作者:太空宇宙 更新时间:2023-11-03 16:44:33 24 4
gpt4 key购买 nike

从数组开始:

a = np.array([1,1,1,2,3,4,5,5])

和过滤器:

m = np.array([1,5])

我现在正在构建一个面具:

b = np.in1d(a,m)

正确返回:

array([ True,  True,  True, False, False, False,  True,  True], dtype=bool)

我需要将唯一值的 bool True 数量限制为最大值 2,以便 1 仅被屏蔽两次而不是三次)。然后将出现生成的掩码(无论第一个真实 True 值的顺序如何):

array([ True,  True,  False, False, False, False,  True,  True], dtype=bool)

array([ True,  False,  True, False, False, False,  True,  True], dtype=bool)

array([ False,  True,  True, False, False, False,  True,  True], dtype=bool)

理想情况下,这是对有限频率的值的一种“随机”屏蔽。到目前为止,我尝试随机选择数组中的原始唯一元素,但实际上掩码选择 True 值,无论它们的频率如何。

最佳答案

对于具有未排序输入数组的一般情况,这是一种基于 np.searchsorted 的方法-

N = 2 # Parameter to decide how many duplicates are allowed

sortidx = a.argsort()
idx = np.searchsorted(a,m,sorter=sortidx)[:,None] + np.arange(N)
lim_counts = (a[:,None] == m).sum(0).clip(max=N)
idx_clipped = idx[lim_counts[:,None] > np.arange(N)]
out = np.in1d(np.arange(a.size),idx_clipped)[sortidx.argsort()]

示例运行 -

In [37]: a
Out[37]: array([5, 1, 4, 2, 1, 3, 5, 1])

In [38]: m
Out[38]: [1, 2, 5]

In [39]: N
Out[39]: 2

In [40]: out
Out[40]: array([ True, True, False, True, True, False, True, False], dtype=bool)

关于python - numpy 掩码数组限制掩码值的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36451071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com