R:两个矩阵的列之间的成对欧几里德距离

时间:2011-05-31 15:41:59

标签: r performance matrix distance euclidean-distance

以下循环需要太长时间才能运行(2分钟/迭代) 肿瘤信号的大小为950000x422 normal_signals的大小为950000x772 有关如何加快速度的想法吗?

for(i in 1:ncol(tumor_signals)){
x <- as.vector(tumor_signals[,i])
print("Assigned x")
y <- t((t(normal_signals) - x)^2)
print("assigned y")
y <- t(sqrt(colSums(y)))
print("done")
#all_distance <- cbind(all_distance,matrix(distance))
print(i)
}

1 个答案:

答案 0 :(得分:7)

您的代码中存在错误 - 您无需进行normal_signals的转置。据我了解,您正在尝试计算所有i = 1,2,...422j=1,2,...,772tumor_signals[,i]normal_signals[,j]之间的欧几里德距离。您可能希望将结果放在422 x 772矩阵中。包rdist()中有一个函数fields可以为您执行此操作:

require(fields)
result <- rdist(t(tumor_signals), t(normal_signals))

顺便提一下,谷歌搜索[R Euclidean distance]很容易找到这个包。