R 成对距离矩阵

R 成对距离矩阵,r,distance,R,Distance,我有一组点坐标,我想用它来生成一个距离矩阵。更具体地说,我有两组点,A的大小为n,B的大小为m,作为二维坐标,我想在矩阵中有A点和B点之间的所有欧几里德距离,没有其他距离 编辑:如果情况更复杂怎么办:如果我有我的矩阵,但现在我想把它的每一行除以从A到集合B中所有点的第一个点的欧几里德距离之和怎么办:也就是说,将每一行距离归一化。有没有一种有效的方法 set.seed(101) n <- 10; m <- 20 A <- data.frame(x=runif(n),y=runif

我有一组点坐标,我想用它来生成一个距离矩阵。更具体地说,我有两组点,A的大小为n,B的大小为m,作为二维坐标,我想在矩阵中有A点和B点之间的所有欧几里德距离,没有其他距离

编辑:如果情况更复杂怎么办:如果我有我的矩阵,但现在我想把它的每一行除以从A到集合B中所有点的第一个点的欧几里德距离之和怎么办:也就是说,将每一行距离归一化。有没有一种有效的方法

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))
对于每个
i=1:n
j=1:m

你可以通过

dists <- sqrt(outer(A$x,B$x,"-")^2 + outer(A$y,B$y,"-")^2)
对于每个
i=1:n
j=1:m

你可以通过

dists <- sqrt(outer(A$x,B$x,"-")^2 + outer(A$y,B$y,"-")^2)
base 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
library(proxy)#请注意,这会屏蔽基R中的dist(…)fn。。。
结果base 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
library(proxy)#请注意,这会屏蔽基R中的dist(…)fn。。。

结果看起来你并没有学到很多关于在网上发布问题的知识,所以。。。虽然你可以看看我的问题到底出了什么问题?你能具体说明一下吗?我会知道的,以备将来参考。阅读后,你似乎没有学到很多关于在网上发布问题的知识,所以。。。虽然你可以看看我的问题到底出了什么问题?你能具体说明一下吗?我会知道的,以备将来参考。请阅读,你能解释一下“-”位的确切含义吗?出于好奇:如果我想要一个不同于距离的函数,只是坐标的任意函数,我会怎么做?如果你能将它分解成标量上的成对运算,那么你可以使用
outer()
具有不同的功能。一般来说,如果你想计算一个函数
f(x{1i},x{2j},y{1i},y{2j})
,那可能很难有效地进行向量化。你能举个例子吗?(注:@jlhoward建议的
proxy::dist()
可以使用任意函数。)你能解释一下“-”位的确切含义吗?还有什么可以放在那里呢?只是出于好奇:如果我想要一个不同于距离的函数,我会怎么做,仅仅是坐标的任意函数?若你们能将它分解成标量上的两两运算,那个么你们就可以用另一个函数使用
outer()。一般来说,如果你想计算一个函数
f(x{1i},x{2j},y{1i},y{2j})
,那可能很难有效地进行向量化。你能举个例子吗?(顺便说一下,@jlhoward建议的
proxy::dist()
使用任意函数。)