【发布时间】:2011-09-05 14:44:12
【问题描述】:
以下循环运行时间过长(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)
}
【问题讨论】:
-
您真的想从整个 normal_signals 矩阵中一次减去一列肿瘤信号吗?您真的想每次运行都将大型 normal_signals 矩阵转置 2 倍吗?如果有必要,您可以在开始之前执行一次。鉴于这两个数据集的列数或列数不同,那么欧几里得距离到底是多少?
-
@Jogn,同意,我对 OP 想要什么感到困惑。删除所有这些打印调用会大大加快速度。
-
在如此庞大的数据结构中,
t无疑是瓶颈之一。 -
好点。是的,t 是一个瓶颈,感谢大家帮助我解决这个问题。(我是一个新程序员,才几个月)。我安装了字段包。 rdist() 工作得更快。因此,处理所有内容大约需要 1.5 小时。要回答这个问题,输出必须是 ncol(normal_signals) x ncol(tumor_signals),每列 == 患者资料,因此我们需要计算每个患者到每个可用正常样本的距离。很抱歉有任何困惑,非常感谢您的帮助
-
每个tumor_signal 列和每个normal_signal 列之间的距离。我不认为删除打印语句会加快这个过程。我插入了这些以查看哪个步骤最慢。还有其他检查方法吗?
标签: r performance matrix distance euclidean-distance