计算多面体(n 维)之间的重叠百分比

Calculating the percentage of overlap between polytopes (n-dimensions)

我必须计算出 n 维空间中多面体之间的重叠百分比,其中我唯一可用的参考源是这些多面体中的一组随机采样点。

假设下面两个R对象是5维的两个不同多胞体的两组随机采样点:

one <- matrix(runif(5000, min = 0, max = 5), ncol = 5) 
two <- matrix(runif(5000, min = 0, max = 4), ncol = 5) 

在这个例子中,我为第二个对象选择了一个较小的范围,所以我们知道应该有小于 10% 的重叠。如果我错了,请告诉我。

编辑: 只是为了说清楚,问题是这两个对象之间的重叠百分比是多少?

我需要一种推广到 n 维空间的方法。

这个 与我正在尝试做的有点相似,但我没能成功。

所以,最直接的方法就是使用hypervolume包。

library(hypervolume)
one <- hypervolume(matrix(runif(5000, min = 0, max = 5), ncol = 5))
two <- hypervolume(matrix(runif(5000, min = 0, max = 4), ncol = 5))

three = hypervolume_set(one, two, check.memory=FALSE)
get_volume(three)

这将为您带来音量。

hypervolume_overlap_statistics(three)

此函数将输出四种不同的指标,其中一种是 Jaccard 相似度指数。 Jaccard Similarity是两个样本集重叠的比例(交集除以并集)。

备选方案

Chris 建议将 volesti 作为替代方案。另一种选择是几何包。

他们不会直接计算比例。在这里你需要找到交集(例如geometry中的intersectn,volesti中的VpolytopeIntersection),然后分别计算多面体的体积以及它们的交集,然后你需要划分体积与两个多面体的体积之和的交集。

在这里,他们也使用不同的方法来计算体积,如果你试图在 n 维中构建凸包,它可能更适合你 space。对我来说,hypervolume 是一个更好的解决方案,因为我正在做的事情更类似于 Hutchinson 从生态学和进化生物学中提出的 n 维 hypervolume 概念。