Если вы хотите сохранить логику своей функции 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 объект.

Ответы на вопрос(3)

Ваш ответ на вопрос