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