通过元素向量比较找到最小差异和对应值的最佳方法是什么?
What the best way to find minimal difference and corresponding value with element-wise vector comparison?
我有一个问题。
向量 A 是查询,向量 B 是参考。
我想看看 A 的哪个值最接近 B 值之一。
两个向量都是有序的。
输入
A = c(1, 1.2, 4, 8, 9, 10, 30)
B = c(0.1, 3.9)
输出
min_diff_value = 0.1
min_value_A = 4
min_value_B = 3.9 (optionnal)
我想知道是否有技巧可以在不耗时循环的情况下执行此操作?
谢谢。
你可以使用 outer
A = c(1, 1.2, 4, 8, 9, 10, 30)
B = c(0.1, 3.9)
mat <- outer(A, B, `-`)
min_diff_value <- min(abs(mat))
dim <- which(mat == min_diff_value, arr.ind = TRUE)
min_value_A <- A[dim[, 1]]
min_value_B <- B[dim[, 2]]
min_diff_value
#[1] 0.1
min_value_A
#[1] 4
min_value_B
#[1] 3.9
另一个想法是使用expand.grid
,即
df1 <- transform(expand.grid(A, B), var3 = abs(Var1 - Var2))
min_diff_value <- min(df1$var3)
#[1] 0.1
min_value_A <- df1$Var1[which.min(df1$var3)]
#[1] 4
min_value_B <- df1$Var2[which.min(df1$var3)]
#[1] 3.9
我有一个问题。
向量 A 是查询,向量 B 是参考。
我想看看 A 的哪个值最接近 B 值之一。
两个向量都是有序的。
输入
A = c(1, 1.2, 4, 8, 9, 10, 30)
B = c(0.1, 3.9)
输出
min_diff_value = 0.1
min_value_A = 4
min_value_B = 3.9 (optionnal)
我想知道是否有技巧可以在不耗时循环的情况下执行此操作?
谢谢。
你可以使用 outer
A = c(1, 1.2, 4, 8, 9, 10, 30)
B = c(0.1, 3.9)
mat <- outer(A, B, `-`)
min_diff_value <- min(abs(mat))
dim <- which(mat == min_diff_value, arr.ind = TRUE)
min_value_A <- A[dim[, 1]]
min_value_B <- B[dim[, 2]]
min_diff_value
#[1] 0.1
min_value_A
#[1] 4
min_value_B
#[1] 3.9
另一个想法是使用expand.grid
,即
df1 <- transform(expand.grid(A, B), var3 = abs(Var1 - Var2))
min_diff_value <- min(df1$var3)
#[1] 0.1
min_value_A <- df1$Var1[which.min(df1$var3)]
#[1] 4
min_value_B <- df1$Var2[which.min(df1$var3)]
#[1] 3.9