我需要估计与多维空间中一组 Voronoi 单元相关的体积。从这个问题Volume of Voronoi cell (python)我测试了这个答案并且它有效,但它真的很慢。
在下面的代码中,获取卷占用了几乎 90% 的时间:
import numpy as np
from scipy.spatial import Voronoi
from scipy.spatial import ConvexHull
import time as t
points = np.random.uniform(0., 100., (5000, 4))
s = t.time()
v = Voronoi(points)
print(t.time() - s)
s = t.time()
vol = np.zeros(v.npoints)
for i, reg_num in enumerate(v.point_region):
indices = v.regions[reg_num]
if -1 in indices: # non-closed regions
vol[i] = np.inf
else:
vol[i] = ConvexHull(v.vertices[indices]).volume
print(t.time() - s)
这 90% 几乎完全被调用使用scipy.spatial.ConvexHull
。
这可以以任何方式改进吗?