【发布时间】:2011-07-30 10:25:20
【问题描述】:
我有一个NxM 矩阵,我想计算M 点之间的欧几里得距离的NxN 矩阵。在我的问题中,N 大约是 100,000。由于我计划将此矩阵用于 k-最近邻算法,因此我只需要保持 k 最小距离,因此生成的 NxN 矩阵非常稀疏。这与来自 dist() 的结果形成对比,例如,这将导致密集矩阵(对于我的尺寸 N 而言可能存在存储问题)。
到目前为止,我发现的 kNN 包(knnflex、kknn 等)似乎都使用了密集矩阵。此外,Matrix 包不提供成对距离函数。
更接近我的目标,我看到spam 包有一个nearest.dist() 函数,它允许人们只考虑小于某个阈值delta 的距离。然而,就我而言,delta 的特定值可能会产生太多的距离(因此我必须密集存储NxN 矩阵)或太少的距离(因此我不能使用 kNN)。
我之前看到过关于尝试使用 bigmemory/biganalytics 包执行 k-means clustering 的讨论,但在这种情况下我似乎无法利用这些方法。
有人知道在 R 中以稀疏方式计算距离矩阵的函数/实现吗?我(可怕的)备份计划是有两个 for 循环并将结果保存在 Matrix 对象中。
【问题讨论】:
-
只是确保...你知道
diststat.ethz.ch/R-manual/R-patched/library/stats/html/dist.html,对吧? -
抱歉,我不清楚为什么 dist() 不适合我的情况。它会产生一个密集的矩阵,存储 NxN 矩阵有点烦人。
-
您可能应该在此处接受您认为实际上可以回答问题的答案之一(如果您认为它最合适,您自己的答案),或者编辑您的问题以澄清为什么他们不这样做。
-
“有点烦人”是轻描淡写的——如果 N 是 100,000,那是一个 480Gb 矩阵
标签: r distance sparse-matrix knn