Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:两个矩阵列之间的成对欧氏距离_R_Performance_Matrix_Distance_Euclidean Distance - Fatal编程技术网

R:两个矩阵列之间的成对欧氏距离

R:两个矩阵列之间的成对欧氏距离,r,performance,matrix,distance,euclidean-distance,R,Performance,Matrix,Distance,Euclidean Distance,以下循环运行时间过长(2分钟/次迭代) 肿瘤信号大小为950000x422 正常_信号的大小为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(

以下循环运行时间过长(2分钟/次迭代) 肿瘤信号大小为950000x422 正常_信号的大小为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)
}
for(i-in-1:ncol(肿瘤信号)){

x你的代码中有一个bug——你不需要对
正常的\u信号进行转置。据我所知,你正在试图计算,对于所有
I=1,2,
422,
j=1,2,
772,
肿瘤信号[,I]
正常的\u信号[,j]之间的欧几里德距离
。您可能需要422 x 772矩阵中的结果。在包
字段中有一个函数
rdist()
,可以为您执行此操作:

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

结果您的代码中有一个错误--您不需要对
正常的\u信号进行转置。据我所知,您正试图计算所有
I=1,2,
422,
j=1,2,
772,
肿瘤信号之间的欧氏距离[,I]
正常的\u信号[,j]
。您可能需要422 x 772矩阵中的结果。在包
字段中有一个函数
rdist()
,可以为您执行此操作:

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

结果你真的想从整个正常_信号矩阵中一次减去一列肿瘤信号吗?你真的想每一次都将大的正常_信号矩阵转换2x吗?如果有必要,你可以在开始之前做一次。考虑到两个数据集的列数不同,或者倍数,欧几里德距离到底是多少?@Jogn同意,我不知道OP想要什么。删除所有打印调用会大大加快速度。在如此大的数据结构中,
t
无疑是瓶颈之一。这是一个很好的观点。是的,t是一个瓶颈,感谢大家帮助我解决这个问题。(我是一名新程序员,刚开始工作几个月)。我安装了fields package。rdist()工作得更快。因此,处理所有内容大约需要1.5个小时。要回答这个问题,输出必须是ncol(正常信号)x ncol(肿瘤信号),Each column==患者档案,因此我们需要计算每个患者到每个可用正常样本的距离。对于任何混淆,我们深表歉意,并感谢您的帮助。距离位于每个肿瘤信号列和每个正常信号列之间。我认为删除打印语句不会加快过程。我插入这些语句是为了查看哪一步是正确的最低。还有其他检查方法吗?你真的想从整个正常信号矩阵中一次减去一列肿瘤信号吗?你真的想每次运行将大的正常信号矩阵转换2倍吗?如果必要的话,你可以在开始之前做一次。考虑到这两个数据集没有e相同数量的列,或其倍数,欧几里德距离到底是多少?@Jogn同意,我不知道OP想要什么。删除所有这些打印调用将大大加快速度。在如此大的数据结构中,
t
当然是瓶颈之一。一个很好的观点。是的,t是瓶颈,谢谢大家为了帮助我解决这个问题。(我是一名新程序员,才几个月)。我安装了fields package。rdist()工作得更快。因此,处理所有内容大约需要1.5个小时。要回答这个问题,输出必须是ncol(正常信号)x ncol(肿瘤信号),Each column==患者档案,因此我们需要计算每个患者到每个可用正常样本的距离。对于任何混淆,我们深表歉意,并感谢您的帮助。距离位于每个肿瘤信号列和每个正常信号列之间。我认为删除打印语句不会加快过程。我插入这些语句是为了查看哪一步是正确的最低。还有其他检查方法吗?我正在试用这个软件包:谢谢Prasad,这是一个很大的帮助。分解dist函数并删除t以几乎相同的速度给出相同的结果。现在,这样的搜索发现了这个问题。我正在试用这个软件包:谢谢Prasad,这是一个很大的帮助。分解dist函数并删除t以几乎相同的速度给出相同的结果。如今,这样的搜索发现了这个问题。