У меня есть матрица 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) время выполнения указано ниже
- вложенный цикл занимает 16 секунд
- Саппли длится 14,8 с
- внешняя занимает 15,8 с
- для каждого с 4 ядрами 13 с
Даже ~ 13-15 секунд для 150 строк времени выполнения данных слишком велико. на 500 строк это заняло около 50 минут.
Есть ли лучший способ довести исполнение до милли / микросекунд. ?? Также предложите мне какой-нибудь лучший подход для очень быстрой генерации несимметричной матрицы сходства ??
Ждем скорейшего ответа.