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

2024-10-02 08:14:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始尝试使用scipy.spatial.ConvexHull函数,该函数(如果我理解正确的话)是qhullC库的包装器。我在Python3中使用scipy0.19.1。在

我第一次使用的是一个真实世界的数据集,它在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. 浏览一下Google的搜索结果,我注意到有一些算法可以计算凸壳的近似值。你推荐他们吗?他们能在我的情况下工作吗?其中一些已经有了Python实现吗?在
  3. 可能我想计算高维空间的凸壳,高达100000维。这是疯了,还是可以用理智的方式来做?在

Tags: 数据函数import算法错误npscipyspatial

热门问题