寻找可基于离散分布拆分整数的Python库或函数
整数按离散分布拆分的Python实现方案
- 目前numpy、scipy官方没有提供直接适配该需求的现成函数,你需要的功能属于整数配额分配场景,主流实现分为两类:原生轻量实现、第三方库扩展实现
原生轻量实现(无需额外安装依赖,工业界最常用)
核心逻辑是先按比例计算向下取整的基础分配值,再把余数按权重优先级分配,保证结果总和完全匹配输入值,示例代码如下:
import numpy as np def split_integer_by_dist(n: int, dist: list[float]) -> list[int]: # 计算基础分配值 base = np.floor(np.array(dist) * n).astype(int) remainder = int(n - base.sum()) # 按权重从高到低排序,余数依次分配给优先级最高的位置 priority = np.argsort(-np.array(dist)) for i in range(remainder): base[priority[i]] += 1 return base.tolist()
可直接测试你给出的示例场景:
- 输入
split_integer_by_dist(10, [0.2,0.3,0.5])输出[2, 3, 5] - 输入
split_integer_by_dist(14, [0.2,0.3,0.5])输出[3, 4, 7] - 输入
split_integer_by_dist(1, [0.2,0.3,0.5])输出[0, 0, 1]
完全匹配你给出的预期结果。
第三方库实现
如果需要支持更复杂的分配规则(比如随机余数分配、分配结果上下限约束),可以使用optbinning库的IntegerAllocator工具,该库是信用风控领域常用的成熟分配工具,支持按自定义分布做整数分配,满足总和约束要求。
内容的提问来源于stack exchange,提问作者Suba Selvandran
相关产品推荐
相关产品推荐

