簡體   English   中英

查找兩個矩陣的行之間的最小距離

[英]Find minimum distances between rows of two matrices

我有兩個表X和Y(X大,Y有9行,當然是相同的列),我需要找到X的每一行與Y的每一行之間的最小歐幾里得距離。 :

x<-matrix(c(3,6,3,4,8),nrow=5,ncol=7,byrow = TRUE)     
y<-matrix(c(1,4,4,1,9),nrow=5,ncol=7,byrow = TRUE)

unlist(lapply(seq_len(nrow(y)), function(i) min(sqrt(colSums((y[i, ] -t(x))^2))))

現在我需要導出Y的哪一行(1到9)是每一行,這是我的問題,因為我不知道如何面對。 關於如何寫這個的任何線索? 我一直在考慮做類似的事情:

unlist(lapply(seq_len(nrow(y)), function(i) nrow(min(sqrt(colSums((y[i, ] - t(x))^2)))==T)))

但我無法使其工作。

謝謝!

您可以使用我的插補包輕松做到這一點:

Sys.setenv("PKG_CXXFLAGS"="-std=c++0x") # needed for the lambda functions in Rcpp

# install/load package, create example data
devtools::install_github("alexwhitworth/imputation")
library(imputation)
set.seed(123)
a <- matrix(rnorm(10000), ncol= 10)
b <- matrix(rnorm(100), ncol=10)

# which row of a is closest to each row of b
apply(b, 1, function(i, a) {
  which.min(imputation:::dist_q.matrix(rbind(i, a), ref= 1L, q=2))
}, a= a)
[1] 471 502 555 969 692 757 116 913 556 566

# which row of b is closest to each row of a
apply(a, 1, function(i, b) {
  which.min(imputation:::dist_q.matrix(rbind(i, b), ref= 1L, q=2))
}, b= b)
### result not shown since it's large

從技術上講,由於1L2是默認值,因此不需要參數refq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM