以下循环需要太长时间才能运行(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)
}
答案 0 :(得分:7)
您的代码中存在错误 - 您无需进行normal_signals
的转置。据我了解,您正在尝试计算所有i = 1,2,...422
和j=1,2,...,772
,tumor_signals[,i]
和normal_signals[,j]
之间的欧几里德距离。您可能希望将结果放在422 x 772矩阵中。包rdist()
中有一个函数fields
可以为您执行此操作:
require(fields)
result <- rdist(t(tumor_signals), t(normal_signals))
顺便提一下,谷歌搜索[R Euclidean distance]
很容易找到这个包。