You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确保一维数组中每个唯一标签计数≥指定值?附合并方案

高效小样本标签合并方案优化

我有一个从0开始标记的一维标签数组,目标是确保每个唯一标签的计数≥指定常量(如10)。若不满足,则将其与邻近标签合并,直到计数达标。

示例数据

import random
import numpy as np

data = np.concatenate(([0]*5, [1]*10, [2]*15, [3]*10, [4]*12, [5]*5))
random.Random(4).shuffle(data)
print(data)

输出结果:

array([2, 3, 4, 5, 2, 4, 2, 4, 2, 2, 0, 4, 1, 4, 4, 5, 4, 2, 1, 3, 1, 1,
       5, 0, 3, 3, 2, 2, 4, 4, 3, 3, 4, 4, 1, 2, 5, 1, 2, 2, 3, 3, 1, 0,
       2, 3, 5, 0, 0, 1, 1, 3, 2, 4, 1, 2, 2])

合并逻辑

从标签0开始,其计数为5(<10),将标签1合并到0(把1替换为0),此时标签0计数达标(15);后续标签2计数达标,继续处理;最后标签5计数不足,将其替换为4。

现有实现及问题

目前通过遍历np.unique(data)并使用np.bincount(data)统计计数的方法实现,但在数据量较大时速度较慢,现有代码如下:

import random
data = np.concatenate(([0]*5, [1]*10, [2]*15, [3]*10, [4]*12, [5]*5))
random.Random(4).shuffle(data)

counts = np.bincount(data)

new_label = 0
count_num = 0

for label in np.unique(data):
    if count_num > 0:
        data[data==label] = label-1
    count_num += counts[label]
    
    if count_num >= 10:
        count_num = 0

    if label == np.unique(data)[-1] and counts[label] < 10:
        data[data==label] = label-1

处理后输出:

array([2, 3, 4, 4, 2, 4, 2, 4, 2, 2, 0, 4, 0, 4, 4, 4, 4, 2, 0, 3, 0, 0,
       4, 0, 3, 3, 2, 2, 4, 4, 3, 3, 4, 4, 0, 2, 4, 0, 2, 2, 3, 3, 0, 0,
       2, 3, 4, 0, 0, 0, 0, 3, 2, 4, 0, 2, 2])

请问有什么更高效的标签合并方案?


内容的提问来源于stack exchange,提问作者zxdawn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:28:28