У меня есть матрица NxM
, и я хочу вычислить матрицу NxN
евклидовых расстояний между M
баллов. В моей задаче N
составляет около 100 000. Поскольку я планирую использовать эту матрицу для алгоритма k-ближайшего соседа, мне нужно сохранить только k
наименьших расстояний, так что результирующая матрица NxN
очень разреженная. Это контрастирует с тем, что получается, например, из dist ()
, что приведет к плотной матрице (и, вероятно, к проблемам с памятью для моего размера N
).
пакеты для kNN, которые я нашел до сих пор ( knnflex
, kknn
и т.д.), похоже, все используют плотные матрицы. Кроме того, пакет Matrix
не предлагает функции попарного расстояния.
Ближе к моей цели я вижу, что пакет spam
имеет ближайший.dist ()
, которая позволяет учитывать только расстояния меньше некоторого порога, дельта
. Однако в моем случае конкретное значение дельта
может привести к слишком большому количеству расстояний (так что мне придется хранить матрицу NxN
плотно) или слишком малым расстояниям (так что я не могу использовать kNN).
Я видел предыдущее обсуждение попытки выполнить кластеризацию k-средних с использованием пакетов bigmemory / biganalytics
, но не похоже, что я могу использовать эти методы в этом случае.
Кто-нибудь знает функцию / реализацию, которая будет вычислять матрицу расстояний в R разреженным образом? Мой (ужасный) план резервного копирования - иметь два цикла для
и сохранять результаты в объекте Matrix
.