我有一个很大的输入矩阵(4000x10000)。我使用dist()
来计算它的欧几里德距离矩阵(大约需要5个小时)。
我需要为另一行(对于4001x10000矩阵)计算“相同”矩阵的距离矩阵。在不重新计算整个矩阵的情况下确定距离矩阵的最快方法是什么?重新计算距离矩阵
重新计算距离矩阵
回答
我假设你的额外的行意味着一个额外的点。如果它意味着一个额外的变量/维度,它会要求一个不同的答案。
首先,对于矩阵的欧氏距离,我建议使用fields
包中的rdist
函数。它是用Fortran编写的,比dist
函数快很多。它返回一个matrix
而不是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)
你已经计算出的距离矩阵:
d0 <- rdist(original.points)
的额外点(S),你只需要计算距离额外点之间以及额外点与原始点之间的距离。我将使用两个加分证明的解决方案是由一般到任意数量的加分:
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))
让我们来看看它匹配什么一个完整的,长期rerun会产生:
d2 <- rdist(rbind(original.points, extra.points))
identical(d1, d2)
# [1] TRUE
我试过用: mydist <-dist(original.points) mydist < - as.matrix(mydist) euc.dist <-function(x){ sqrt(sum((extra.point - x)^ 2)) } extra.dist <-apply(original.points,1,euc.dist) rbind(mydist,extra.dist) 我的问题是将多余的行绑定到类“dist” – sztup
距离矩阵是一个方形矩阵。您最后只需添加一行,您还应该在末尾添加一列,并且右下角的值应为零(额外点与其自身之间的距离)。但请阅读我的解决方案... – flodel
- 1. 加速R算法来计算Hellinger距离的距离矩阵
- 2. Javascript矩阵和距离计算
- 3. 计算多维矩阵中的距离
- 4. 从距离矩阵计算亲和力矩阵
- 5. 计算给定行向量矩阵的距离矩阵
- 6. 距离矩阵
- 7. 重复距离矩阵计算的高效(记忆方式)功能和超大距离矩阵的分块
- 8. 矩阵,距离,javascript
- 9. 机器人,两地之间的计算距离,谷歌距离矩阵
- 10. python hcluster,距离矩阵和浓缩距离矩阵
- 11. 距离矩阵的近似估计
- 12. 哪个SciPy稀疏矩阵类最适合计算距离矩阵?
- 13. 计算距离
- 14. 计算距离
- 15. 距离计算
- 16. 计算距离
- 17. 计算距离
- 18. 计算距离
- 19. 计算距离
- 20. 计算距离
- 21. 计算距离
- 22. 计算距离
- 23. 计算距离
- 24. 计算距离
- 25. 堪培拉距离矩阵手动计算
- 26. CUDA,计算3D对象之间的距离矩阵
- 27. 从预先计算的距离矩阵绘制树状图
- 28. 用numpy计算距离矩阵的更快方法是什么?
- 29. 从x,y,z坐标计算欧几里得距离矩阵
- 30. pyspark计算稀疏向量的距离矩阵
你知道如何做,但不是在R或你不知道该怎么做吗? – carlosdc
额外的行是额外的点还是额外的变量/维度? – flodel