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

时间:2021-07-09 15:41:43

标签: r geometry

我必须计算出 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 维空间的方法。

这个 stackoverflow question 与我正在尝试做的有点相似,但我没有设法让它工作。

1 个答案:

答案 0 :(得分:1)

所以,最直接的方法是使用 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 作为替代方案。另一种选择是几何包。

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

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