簡體   English   中英

成對距離矩陣

[英]Matrix of pairwise distances

我有一組點坐標,我想用它來生成距離矩陣。 更具體地說,我有兩組點,大小為n的A和大小為m的B,以2d坐標形式給出,並且我希望矩陣中具有A點與B點之間的所有歐幾里得距離,而沒有其他距離。

編輯:如果情況更復雜怎么辦:如果我有矩陣,但是現在我想將矩陣的每一行除以集合B中所有點與A的第一個點的歐幾里得距離的總和:每行的距離。 有有效的方法嗎?

set.seed(101)
n <- 10; m <- 20
A <- data.frame(x=runif(n),y=runif(n))
B <- data.frame(x=runif(m),y=runif(m))

我們想要

sqrt((x_{1,i}-x_{2,j})^2+(y_{1,i}-y_{2,j})^2)

對於每個i=1:nj=1:m

您可以通過

dists <- sqrt(outer(A$x,B$x,"-")^2 + outer(A$y,B$y,"-")^2)

在這種情況下是10x20的矩陣。 換句話說,我們正在發現每對x值對與每對y值之間的差( "-"是對減法運算符的引用),然后進行平方,加法和取平方根。

如果您想按總和歸一化每一行,我建議

norm.dists <- sweep(dists,MARGIN=1,STATS=rowSums(dists),FUN="/")

基數R中的dist(...)函數將無濟於事,因為它會計算自動距離(給定數據集中從每個點到每個其他點的距離)。 您想跨距離。 proxy中有一個為此目的設計的dist(...)函數。

使用@BenBolker提供的數據集,

library(proxy)   # note that this masks the dist(...) fn in base R...
result <- dist(A,B)
result[1:5,1:5]
#           [,1]      [,2]      [,3]      [,4]      [,5]
# [1,] 0.5529902 0.7303561 0.1985409 0.6184414 0.7344280
# [2,] 0.7109408 0.9506428 0.1778637 0.7216595 0.9333687
# [3,] 0.2971463 0.3809688 0.4971621 0.4019629 0.3995298
# [4,] 0.4985324 0.5737397 0.4760870 0.5986826 0.5993541
# [5,] 0.4513063 0.7071025 0.3077415 0.4289675 0.6761988

暫無
暫無

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

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