使用qhull / SciPy

时间:2018-05-28 23:41:30

标签: python scipy convex-hull qhull

我开始尝试使用scipy.spatial.ConvexHull函数,(如果我理解正确的话)是qhull C库的包装器。我正在使用SciPy 0.19.1和Python3。

我首先使用了一个真实世界的数据集,该数据集包含21个维度中的700个点,以及scipy.spatial.ConvexHull崩溃,并出现此错误:scipy.spatial.qhull.QhullError: QH6235 qhull error (qh_memalloc): negative request size (-2003053336). Did int overflow due to high-D?

使用以下示例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分,有时会崩溃,有时会成功。我不确定,但似乎存在内存分配错误?

  1. 有没有办法避免内存问题?凸壳算法有700点太多了吗?
  2. 浏览谷歌的搜索结果,我注意到有一些算法来计算凸包的近似值。你推荐他们吗?他们可以在我的情况下工作吗?是否已经为其中一些实现了Python实现?
  3. 我可能想要计算高维空间的凸包,最多100,000个维度。这种疯狂,还是可以以明智的方式完成?

1 个答案:

答案 0 :(得分:0)

TLDR:ConvexHull在高维方面挣扎

ConvexHull使用qhull。我在matlab(也使用qhull)中使用了等效实现,但由于需要大量内存,因此在高维方面存在问题。我联系了确认这是问题的开发人员。

有关监视Qhull的内存性能的帮助,请参阅“ Qhull的性能” http://www.qhull.org/html/qh-code.htm#performance

“何时使用Qhull”可能也有帮助 http://www.qhull.org/html/index.htm#when