Python自适应直方图宽度

Python自适应直方图宽度,python,numpy,Python,Numpy,我目前正在从事一个项目,我必须存储多达10维的数据。这在numpy.historogramdd中完全可以使用,但是在一个应用中有一个严重的障碍: 我的参数空间相当大,但实际上只有一小部分是由数据占据的(比如,可能只有几%左右…)。在这些区域中,数据非常丰富,因此我希望使用相对较小的箱子宽度。然而,这里的问题是RAM的使用量完全爆炸了。我看到20GB+仅用于5个维度,这已经绝对不实用了。我尝试自己定义网格,但问题仍然存在 我的想法是手动指定箱子边缘,在这里我只对数据空间中的空白区域使用非常大的箱子

我目前正在从事一个项目,我必须存储多达10维的数据。这在numpy.historogramdd中完全可以使用,但是在一个应用中有一个严重的障碍:

我的参数空间相当大,但实际上只有一小部分是由数据占据的(比如,可能只有几%左右…)。在这些区域中,数据非常丰富,因此我希望使用相对较小的箱子宽度。然而,这里的问题是RAM的使用量完全爆炸了。我看到20GB+仅用于5个维度,这已经绝对不实用了。我尝试自己定义网格,但问题仍然存在

我的想法是手动指定箱子边缘,在这里我只对数据空间中的空白区域使用非常大的箱子宽度。只有在我实际拥有数据的地区,我才需要更精细的尺度

我想知道这里是否有人知道这样一个实现已经可以在任意数量的维度上工作了


谢谢我认为您应该首先重新映射数据,然后创建直方图,然后在知道值已转换的情况下解释直方图。一种可能是调整直方图刻度标签,以便它们显示映射值

例如,一种可能的方法是:

  • 将一维数据排序为一维数组
  • 整合这个数组,这样你就有了一个累积分布
  • 找到这个分布的最陡部分,并为直方图的峰值选择一个与“良好”仓位大小相对应的水平间隔,也就是说,一个可以提供良好分辨率的大小
  • 沿垂直轴查找相同间隔的大小。这将为您提供沿垂直轴应用的箱子大小
  • 使用箱子的垂直跨度创建箱子-即“绘制”水平等距线来创建箱子,而不是最常用的绘制垂直箱子的方法 这样,您将有很多数据更密集的存储箱,而较少的存储箱则数据更稀疏

    需要考虑两件事:

  • 映射函数是排序值沿该维度的累积分布。这可能是相当武断的。如果分布类似于某个众所周知的代数函数,您可以用数学方法定义它,并使用它在实际值数据和“自适应”直方图数据之间执行双向转换
  • 这只适用于一个维度。如果要组合来自多个维度的直方图,则必须注意这将如何工作

  • 哼。我不知道如何将此方法与任意数量的维度集成。现在,我正试图在重要的地方评估密度,即在我的数据所在的离散网格坐标处,这意味着我让数据选择了垃圾箱…无论如何,谢谢!!