首页 > 解决方案 > 找到值最接近二维点的两个向量的索引的最佳方法是什么

问题描述

我会尽量用最好的方式解释我的目标。

假设我有两个向量:

Teffs <- c(6000, 6100, 6200, ..., 7500)
Ls <- c(40, 41, 42, 43, 44, ..., 60)

我想找出向量中的哪些元素给出最接近点的值(6199、42.1)。Teffs 的索引必须与 Ls 中的索引相同,否则我可以使用以下方法轻松地单独索引每个向量:

values <- c(6199, 42.1)
indexa <- which.min(abs(Teffs - values[1]))
indexb <- which.min(abs(Ls - values[2]))
indexa
3
indexb
3

在这种情况下,很明显向量中的第三个元素给出了最接近所需点的值。但是,如果它更加模棱两可怎么办?如果我想找到最接近的索引点是 (6200, 62) 或 (6800, 59) 甚至 (6000, 60) 怎么办?在保持 Teffs 中的索引与 Ls 中的索引相同的同时,我将如何处理这个问题?

标签: r

解决方案


由于尺度不同(L,log10 和 Teff,线性),这应该有效:

Teff <- c(6000, 6100, 6200, 7500)
L <- c(40, 41, 42, 43)
dst <- sqrt((log10(Teff) - log10(6199))^2 + (L - 42.1)^2)
which.min(dst)
# [1] 3

这调整了尺度,但每个变量的范围仍然可能是一个问题,因为 L 大约是 log10(Teff) 的 10 倍。这可能建议使用 L/10。


推荐阅读