【问题标题】:Finding all possible bin combinations查找所有可能的 bin 组合
【发布时间】:2015-07-02 22:07:28
【问题描述】:

我有 100.000 个观察值,变量 age 在 18-80 的范围内。我想根据age 变量找到X 箱。 bin 范围不能重叠,并且应该组合跨越整个间隔。例如,对于 X = 4,一种可能的 bin 组合可能是:

  • 18-30
  • 31-45
  • 46-57
  • 58-80

在给定值X 的情况下,如何找到所有可能的 bin 组合?

编辑:由@Wolf 提示,这是我正在考虑自己实施的另一个约束。每个 bin 必须为 age 变量保存至少 10 个值。这当然限制了X 所以X <= 6

我尝试将其整合到@mkrieger1 的答案中,但失败了。

def bin_combinations(values, n):
    """
    Generate all possible combinations of splitting the values into n
    contiguous parts.

    >>> list(bin_combinations('abcd', 3))
    [['a', 'b', 'cd'], ['a', 'bc', 'd'], ['ab', 'c', 'd']]
    """

    for indices in combinations(range(1, len(values)), n - 1):
        li = list(indices)
        starts = [None] + li
        ends = li + [None]
        size = li[-1] - li[0]
        if size >= 10:
            yield [values[start:end] for start, end in zip(starts, ends)]

【问题讨论】:

  • 对这些垃圾箱有进一步的限制吗?例如,18, 19, 20, 21-80 是一个有效的组合吗?
  • 我已经更新了我的帖子。
  • 您是否尝试过让我的解决方案适应您的受限问题?
  • 是的,但我很难扔掉整套垃圾箱,而不仅仅是一个垃圾箱。请参阅下面的代码:for indices in combinations(range(1, len(values)), n - 1): li = list(indices) starts = [None] + li ends = li + [None] size = li[-1] - li[0] if size >= 10: yield [values[start:end] for start, end in zip(starts, ends)]
  • 我尝试了几种不同的改动,但都没有成功。

标签: python combinations slice binning


【解决方案1】:

最合适的方法是使用itertools 标准库模块中的combinations 函数找到组合。

from itertools import combinations

def bin_combinations(values, n):
    """
    Generate all possible combinations of splitting the values into n
    contiguous parts.

    >>> list(bin_combinations('abcd', 3))
    [['a', 'b', 'cd'], ['a', 'bc', 'd'], ['ab', 'c', 'd']]
    """
    for indices in combinations(range(1, len(values)), n - 1):
        starts = [None] + list(indices)
        ends = list(indices) + [None]
        yield [values[start:end] for start, end in zip(starts, ends)]

【讨论】:

  • 感谢您的快速回复!我添加了另一个约束(请参阅我的帖子)。
猜你喜欢
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
相关资源
最近更新 更多