r - 找到值最接近二维点的两个向量的索引的最佳方法是什么
问题描述
我会尽量用最好的方式解释我的目标。
假设我有两个向量:
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 中的索引相同的同时,我将如何处理这个问题?
解决方案
由于尺度不同(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。
推荐阅读
- android - 更新 Android Studio 4.1 时出错。使用 TargetSDK 版本 29 时出错
- node.js - nginx:无效选项:“off”和entrypoint.sh::权限被拒绝
- android - 尝试在 Eclipse 中生成 APK
- asp.net-core - 使用 Saml2 和 Okta 作为服务提供者的 Asp.Net Core 3 中的用户身份验证
- azure - 在 Azure Devops 的拉取请求中显示接受标准
- spring-boot - Cassandra 读取查询返回空结果使用 springframework 数据 cassandra
- javascript - 我应该使用队列系统来处理多租户系统中的 PDF 文本识别吗?
- vb.net - 加载一个包含 15 个数字的 .txt 文件,显示它们并删除重复的 VB.net
- nix - 为什么 Nix lambdas 和 ? 操作员是这样交互的吗?
- javascript - 如何在两个javascript函数之间实现一个promise?