Python 使用qhull/SciPy计算大型数据集凸包时的问题

Python 使用qhull/SciPy计算大型数据集凸包时的问题,python,scipy,convex-hull,qhull,Python,Scipy,Convex Hull,Qhull,我开始使用scipy.spatial.convxhull函数进行实验,该函数(如果我理解正确的话)是qhullC库的包装器。我正在将SciPy 0.19.1与Python3一起使用 我首先使用了一个现实世界的数据集,该数据集具有21维700个点,并且scipy.spatial.convxhull崩溃,错误如下:scipy.spatial.qhull.QhullError:QH6235 qhull error(qh_memalloc):负请求大小(-200305336)。是否由于高D导致int溢出

我开始使用
scipy.spatial.convxhull
函数进行实验,该函数(如果我理解正确的话)是
qhull
C库的包装器。我正在将SciPy 0.19.1与Python3一起使用

我首先使用了一个现实世界的数据集,该数据集具有21维700个点,并且
scipy.spatial.convxhull
崩溃,错误如下:
scipy.spatial.qhull.QhullError:QH6235 qhull error(qh_memalloc):负请求大小(-200305336)。是否由于高D导致int溢出?

尝试使用以下Python3示例代码几次后:

import numpy as np
X = np.random.randn(40,21)
print("Computing convex hull of X (shape: " + str(X.shape) + ")...")
from scipy.spatial import ConvexHull
hull = ConvexHull(X)
我设法把问题缩小到了范围。在21个维度中随机生成39个点,它可以工作。有了40分,它有时崩溃,有时成功。我不确定,但似乎有内存分配错误

  • 有没有办法避免内存问题?对于凸包算法,700点是否太多
  • 浏览谷歌的搜索结果,我注意到有一些算法可以计算凸包的近似值。你推荐他们吗?他们能在我的情况下工作吗?其中一些已经有Python实现了吗
  • 我可能想计算高维空间的凸包,高达100000维。这是一种疯狂,还是一种明智的做法

  • TLDR:高维斗争中的凸轮

    ConvexHull使用qhull。我在matlab中使用了一个等价的实现(也使用了qhull),由于需要大量的内存,因此在高维中遇到了一个问题。我联系了开发者,他们确认这是一个问题

    有关监视Qhull内存性能的帮助,请参阅“Qhull的性能”

    “何时使用Qhull”也可能会有所帮助

    也许你可以用一组较小的线性组合来近似大维空间?@Aryamcarthy我认为你的编辑有问题。在阅读时,我注意到有一些算法可以计算凸包的近似值。你推荐它们吗?它们在我的情况下可以工作吗?显然让我想:“不是那么广泛吗,b?”但更重要的是:作者没有提到任何关于他的用例的内容。这些信息在您的编辑中被删除。我在12维参数空间中使用
    scipy.optimize.shgo
    时遇到了完全相同的问题。我想知道是否已经建立了某种解决方案。也许我可以在本地编辑scipy的sou相应的rce代码。