【问题标题】:Dynamically grouping a given set of numbers动态分组给定的一组数字
【发布时间】:2016-09-17 08:14:46
【问题描述】:

给定一组数字,是否有任何算法或方法可以将它们分成不同的组并计算它们?

类似:

input : [1,2,3,4,5,100,200,1000,2500,3000]
output : 1-5         : 5
         100 -200    : 2   
         1000 - 3000 : 3

input : [1,1,2,3,4,5,6,7,8,9,10,11,15,75,80]
output : 1 - 15   : 13
         75 - 80  : 2  

input : [1,100,1000]
output : 1    : 1
         100  : 1
         1000 : 1

说组数应该是最少 2 到最多 10 个。 如何做到这一点?

【问题讨论】:

  • 如果我给你从 1 到 1000 的数字怎么办?你会如何拆分它们?

标签: python math statistics numeric


【解决方案1】:

你问的任务有点含糊,因为分组的标准没有很好的定义。

鉴于集合中至少有两个不同的数字,我建议采用以下方法:

  1. 查找数字范围
  2. 定义覆盖跨度的 10 个非重叠 bin 的边界,以便最小和最大元素落入不同的 bin 中
  3. 将数字分组到 bin 中
  4. 丢弃空垃圾箱(至少 2 个垃圾箱将保留,因为最小和最大数量位于不同的垃圾箱中)
  5. 调查剩余垃圾箱的内容并打印您的报告

当然,您以这种方式获得的组或多或少是任意的。如果你想避免这样的分组:

input : [1,1,2,3,4,5,6,7,8,9,10,11,15,75,80] output : 1 - 8 : 9 9 - 15 : 4 75 - 80 : 2 那么你应该:

  1. 定义集群的优劣标准
  2. 寻找合适的聚类算法

【讨论】:

    【解决方案2】:

    这是机器学习很有帮助的问题。 这是解决这个问题的一个简单而好的解决方案:Clustering values by their proximity in python (machine learning?)。 它使用需要先安装的 numpy 和 sklearn。

    【讨论】:

      【解决方案3】:

      您需要某种聚类。数量有限的 2..10 个组(集群)k-means 看起来是个不错的选择。

      并且您肯定需要一些取决于数字值的指标(因为简单的差异不适合将 1,2,3 和 100,200 划分为不同的集群)。可能是,取值对数?

      【讨论】:

      • 除了 Kmeans 还有其他方法吗?我需要这个计算几乎实时运行。
      • 是的,有很多 en.wikipedia.org/wiki/Cluster_analysis,kmeans 是最知名的,并且实现广泛可用
      猜你喜欢
      • 2018-03-18
      • 2020-04-22
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 2014-01-01
      • 2015-07-14
      相关资源
      最近更新 更多