У меня есть матрица 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
.