Расчет расстояний в Bio.Cluster - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть данные последовательности в виде матрицы следующим образом.

matrix=
 [
 [78 65 78 ... 84 65 65]
 [78 71 78 ... 71 71 71]
 [78 67 78 ... 84 65 84]
 ...
 [65 65 65 ... 65 65 71]
 [67 67 71 ... 84 65 65]
 [65 71 65 ... 65 65 84]
 ]

Форма этой матрицы (105772, 151).Моя цель - объединить их в два кластера, используя библиотеку http://biopython.org/DIST/docs/tutorial/Tutorial.html#htoc230.Чтобы создать кластеры, мне нужен какой-то метод сходства, чтобы определить сходство между различными чтениями в моих данных.Biopython предоставляет метод для вычисления расстояния между различными чтениями с помощью следующего метода евклидова расстояния.

      distances = distancematrix(matrix, dist='e')

Здесь «e» представляет евклидово расстояние.Для моих данных shape (105772, 151) мне понадобилось около 18 минут, чтобы вычислить расстояния.

После этого я попытался создать кластеры, используя kmeans, со следующим кодом Python.

clusterid, error, nfound = kcluster(matrix, dist='e')

мне потребовалось меньше минуты, чтобы выполнить вышеуказанную команду.

Мне интересно, почему команда kcluster из biopython занимает так меньше времени, тогда как вычисление расстояния занимаетбольше времени?Как и для создания кластеров, мы должны сначала создать матрицу расстояний, на основе которой мы делаем все остальные вычисления.Таким образом, kcluster включает вычисление расстояний по умолчанию?

Или, может быть, мое понимание о kcluster и расстояниях от biopython неверно?

...