【问题标题】:Fast way to compute distance matrix in R for large matrix [duplicate]为大型矩阵计算R中距离矩阵的快速方法[重复]
【发布时间】:2021-10-26 02:15:43
【问题描述】:

我正在使用 R 来计算大型矩阵的距离矩阵。矩阵有 39900 行和 1990 列:

set.seed(123)
#Matrix
M <- matrix(rnorm(39900*1990),nrow = 39900,ncol = 1990)

当我要计算距离矩阵时出现问题:

#Distance
d <- dist(M,method = 'euclidean')

有一台 icore3 处理器和 8GB ram 使用 R 64 位的计算机,它已经过去了超过 24 小时,还没有计算矩阵。

有什么方法可以使用Rcpp 或其他方法来提高计算能力?我需要获取距离矩阵,本站其他解决方案对解决问题没有帮助。

【问题讨论】:

  • @F.Privé 非常感谢!不幸的是,该解决方案大约是两个矩阵,在我的情况下,我只有一个矩阵,我想要所有行之间的距离!
  • 对 X 和 Y 使用相同的矩阵?
  • @F.Privé 是的,这也是有效的!

标签: r matrix rcpp


【解决方案1】:

也许可以试试distances 包:https://cran.r-project.org/web/packages/distances/distances.pdf

install.packages("distances")
library("distances")
set.seed(123)
M <- matrix(rnorm(39900*1990),nrow = 39900,ncol = 1990)
d <- distances(M)

【讨论】:

  • 这非常有效!只是好奇生成的对象可以输入到像hclust()这样的聚类算法中吗?
  • 从文档中,您可以通过调用 distances::distances() 获得一个 distances 对象。看起来您可以将distances 对象传递给distances::distance_matrix() 并获得dist 对象作为输出,hclust 可以使用该对象。
猜你喜欢
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
相关资源
最近更新 更多