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