R有效的基于性能的方法,无需使用嵌套的for循环即可填充矩阵

时间:2018-09-07 08:32:51

标签: r for-loop matrix similarity

我有一个DTM矩阵,其输入数据为150行(实际上甚至更大,大于10000),以生成尺寸为150 x 150的相似矩阵输出。
在矩阵中不对称的地方计算相似度。
余弦相似度对于A-> B和B-> A是对称的。 (A和B代表数据框中带有文本的行。)
因此,我使用公式A / AUB。

for(i in 1:nrow(dtm))
 for(j in 1:nrow(dtm))
    mat[i,j] = ( rowsums(dtm[i,]) / length(names(which(dtm[i,]|dtm[j,]==TRUE))) )  

下面以150行的示例(即150x150)为例,列出了执行时间
 -嵌套的for循环需要16秒
 -耗时14.8秒
 -外部需要15.8秒
 -对于每个具有4个核心的内核,需要13秒

即使对于150行数据,约13至15秒的执行时间也太大。 500行需要大约50分钟的时间。
有没有更好的方法可以使执行速度达到毫秒/微秒。还建议我有什么更好的方法可以非常快速地生成非对称相似矩阵??

期待早日得到答复。

0 个答案:

没有答案