gpt4 book ai didi

r - 在 R 中选择 n 个最远的点

转载 作者:行者123 更新时间:2023-12-04 14:13:13 25 4
gpt4 key购买 nike

给定一组 xy 坐标,如何选择 n 个点,使这些 n 个点彼此最远?

一种可能对大数据集效果不佳的低效方法如下(从 1000 个点中找出最远的 20 个点):

xy <- cbind(rnorm(1000),rnorm(1000))

n <- 20
bestavg <- 0
bestSet <- NA
for (i in 1:1000){
subset <- xy[sample(1:nrow(xy),n),]
avg <- mean(dist(subset))
if (avg > bestavg) {
bestavg <- avg
bestSet <- subset
}
}

最佳答案

此代码基于 Pascal 的代码,删除距离矩阵中行和最大的点。

m2 <- function(xy, n){

subset <- xy

alldist <- as.matrix(dist(subset))

while (nrow(subset) > n) {
cdists = rowSums(alldist)
closest <- which(cdists == min(cdists))[1]
subset <- subset[-closest,]
alldist <- alldist[-closest,-closest]
}
return(subset)
}

在高斯云上运行,其中 m1是@pascal 的功能:
> set.seed(310366)
> xy <- cbind(rnorm(1000),rnorm(1000))
> m1s = m1(xy,20)
> m2s = m2(xy,20)

通过查看点间距离的总和,看看谁做得最好:
> sum(dist(m1s))
[1] 646.0357
> sum(dist(m2s))
[1] 811.7975

方法2获胜!并与 20 个点的随机样本进行比较:
> sum(dist(xy[sample(1000,20),]))
[1] 349.3905

正如预期的那样,效果很差。

发生什么了?让我们绘制:
> plot(xy,asp=1)
> points(m2s,col="blue",pch=19)
> points(m1s,col="red",pch=19,cex=0.8)

enter image description here

方法 1 生成红点,它们在空间上均匀分布。方法 2 创建蓝点,它几乎定义了周长。我怀疑这样做的原因很容易解决(甚至在一维中更容易......)。

使用初始点的双峰模式也说明了这一点:

enter image description here

方法 2 再次产生比方法 1 大得多的总和距离,但两者都比随机抽样好:
> sum(dist(m1s2))
[1] 958.3518
> sum(dist(m2s2))
[1] 1206.439
> sum(dist(xy2[sample(1000,20),]))
[1] 574.34

关于r - 在 R 中选择 n 个最远的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22152482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com