我正在尝试计算10维空间中9个点的凸包。通过scipy接口,我调用scipy.spatial.ConvexHull(points)
,得到QH6214 qhull input error: not enough points(9) to construct initial simplex (need 12)
的错误提示。
我认为无论是哪个维度,凸包的定义都是明确的。这里发生了什么?是否有其他函数可以解决这个问题?
我正在尝试计算10维空间中9个点的凸包。通过scipy接口,我调用scipy.spatial.ConvexHull(points)
,得到QH6214 qhull input error: not enough points(9) to construct initial simplex (need 12)
的错误提示。
我认为无论是哪个维度,凸包的定义都是明确的。这里发生了什么?是否有其他函数可以解决这个问题?
也许在计算凸包之前将点投影到超平面上会起作用。
例如,使用scikit-learn
工具包中的主成分分析类sklearn.decomposition.PCA
来降低维度。
vertices = np.random.randn(9, 10)
from sklearn.decomposition import PCA
model = PCA(n_components=8).fit(vertices)
现在你可以使用 model.transform
和 model.inverse_transform
在顶点和投影之间进行转换。
proj_vertices = model.transform(vertices)
hull_kinda = ConvexHull(proj_vertices)
hull_kinda.simplices
array([[6, 4, 3, 8, 0, 7, 5, 1],
[2, 4, 3, 8, 0, 7, 5, 1],
[2, 6, 3, 8, 0, 7, 5, 1],
[2, 6, 4, 8, 0, 7, 5, 1],
[2, 6, 4, 3, 0, 7, 5, 1],
[2, 6, 4, 3, 8, 7, 5, 1],
[2, 6, 4, 3, 8, 0, 5, 1],
[2, 6, 4, 3, 8, 0, 7, 1],
[2, 6, 4, 3, 8, 0, 7, 5]], dtype=int32)
现在使用 model.inverse_transform
将简单形式重新转化为您的10维数据。