R 重新计算距离矩阵

R 重新计算距离矩阵,r,distance,R,Distance,我有一个大的输入矩阵(4000x10000)。我使用dist()计算它的欧几里德距离矩阵(大约需要5个小时)。 我需要为“相同”矩阵计算距离矩阵,并增加一行(对于4001x10000矩阵)。在不重新计算整个矩阵的情况下,确定距离矩阵的最快方法是什么?我假设您的额外行意味着额外的点。如果它意味着一个额外的变量/维度,则需要不同的答案 首先,对于矩阵的欧氏距离,我建议使用字段包中的rdist函数。它是用Fortran编写的,比dist函数快得多。它返回一个矩阵而不是dist对象,但您始终可以使用as

我有一个大的输入矩阵(4000x10000)。我使用
dist()
计算它的欧几里德距离矩阵(大约需要5个小时)。

我需要为“相同”矩阵计算距离矩阵,并增加一行(对于4001x10000矩阵)。在不重新计算整个矩阵的情况下,确定距离矩阵的最快方法是什么?

我假设您的额外行意味着额外的点。如果它意味着一个额外的变量/维度,则需要不同的答案

首先,对于矩阵的欧氏距离,我建议使用
字段
包中的
rdist
函数。它是用Fortran编写的,比
dist
函数快得多。它返回一个
矩阵
而不是
dist
对象,但您始终可以使用
as.matrix
as.dist
从一个对象转到另一个对象

这是(比你的小)样本数据

num.points <- 400
num.vars   <- 1000
original.points <- matrix(runif(num.points * num.vars),
                          nrow = num.points, ncol = num.vars)

num.points您知道怎么做但不在R中吗?或者您不知道怎么做?额外的一行是额外的点还是额外的变量/维度?我尝试使用:mydistA距离矩阵是平方矩阵。只在末尾添加一行,还应在末尾添加一列,右下角的值应为零(额外点与自身之间的距离)。但请阅读我的解决方案。。。
d0 <- rdist(original.points)
extra.points <- matrix(runif(2 * num.vars), nrow = 2)
inner.dist   <- rdist(extra.points)
outer.dist   <- rdist(extra.points, original.points)
d1 <- rbind(cbind(d0, t(outer.dist)),
            cbind(outer.dist, inner.dist))
d2 <- rdist(rbind(original.points, extra.points))

identical(d1, d2)
# [1] TRUE