我有一个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分钟的时间。
有没有更好的方法可以使执行速度达到毫秒/微秒。还建议我有什么更好的方法可以非常快速地生成非对称相似矩阵??
期待早日得到答复。