У меня есть NxM
матрица, и я хочу вычислить NxN
матрицу евклидовых расстояний между M
точками. В моей задаче N
составляет около 100 000. Поскольку я планирую использовать эту матрицу для алгоритма k-ближайшего соседа, мне нужно сохранить только k
наименьших расстояний, поэтому итоговая матрица NxN
будет очень разреженной. Это контрастирует с тем, что получается, например, из dist()
, что привело бы к плотной матрице (и, вероятно, к проблемам с хранением для моего размера N
).
Пакеты для kNN, которые я нашел до сих пор (knnflex
, kknn
и т. Д.), Похоже, используют плотные матрицы. Кроме того, пакет Matrix
не предлагает функции попарного расстояния.
Ближе к моей цели я вижу, что пакет spam
имеет nearest.dist()
функцию, которая позволяет учитывать только расстояния, меньшие некоторого порога delta
. В моем случае, однако, конкретное значение delta
может привести к слишком большому количеству расстояний (так что я должен плотно хранить матрицу NxN
) или слишком малому количеству расстояний (так что я не могу использовать kNN).
Я видел предыдущее обсуждение попытки выполнить k-means кластеризация с использованием пакетов bigmemory/biganalytics
, но, похоже, я не могу использовать эти методы в этом случае.
Кто-нибудь знает функцию / реализацию, которая будет вычислять матрицу расстояний разреженным образом в R? Мой (ужасный) план резервного копирования - иметь два for
цикла и сохранять результаты в Matrix
объекте.
dist
stat.ethz.ch/R-manual/R-patched/library/stats/html/dist.html, верно? - person Benjamin   schedule 06.04.2011