我正在尝试编写一个函数 get_best_bin
将一个值放入最合适的 bin 中:
我有一个 bin,它是(开始,结束)值的列表。
def get_best_bin(value, bins):
return index of bins that the value fits best into.
例如
bins = [
(0.0, 0.5),
(0.5, 1.5),
(1.5, 3.0),
(4.5, 5.5)
]
value = [0.4,1.0]
等等
get_best_bin(value, bins)
会返回:
1
因为 [0.4,1.0]
中的大部分行都属于 bin (0.5, 1.5)
。 * 注意:尽管与 bin (0.0, 0.5)
有一个小交集,但大部分交集在 (0.5, 1.5)
*
到目前为止,这是我尝试过的方法,但我只能获得存在交集的可能的 bins:
possible_bins = set()
for ind,width in enumerate(bins):
if width[0] <= value[0] <= width[1]:
possible_bins.add(width)
if width[0] <= value[1] <= width[1]:
possible_bins.add(width)
print(possible_bins)
#{(0.0, 0.5), (0.5, 1.5)}
我可以假设任何值都会与至少一个 bin 有一些交集。
最佳答案
你可以这样做:
def get_best_bin(value, bins):
intesections = [min(value[1], b[1]) - max(value[0], b[0]) for b in bins]
return intesections.index(max(intesections))
解释:
如果有交集,交集从max(value[0], b[0])
开始,到min(value[1], b[1])结束
。所以交集的长度是end - start
,意思是min(value[1], b[1]) - max(value[0], b[0])
.
列表理解是创建一个交集长度列表(对应于每个 bin),然后您可以返回该列表中最大数字的索引。
关于python - 查找数据最适合的 bin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60113765/