计算R中的稀疏成对距离矩阵
我有一个
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聚类的讨论,但在这种情况下我似乎不能利用这些方法。
有人知道在R中以稀疏方式计算距离矩阵的函数/实现吗?我的(可怕的)备份计划是有两个for
循环并将结果保存在Matrix
对象中。
没有找到相关结果
已邀请:
3 个回复
门锑腺潮
尝试9个2d点:
并尝试更大的问题(10k点)。然而,在100k点和更多尺寸上,它将花费很长时间(例如15-30分钟)。
附:刚刚注意到你在我写这篇文章时发布了一个答案:这里的解决方案速度大约是其两倍,因为它没有计算两次相同的距离(点1和13之间的距离与点13和1之间的距离相同)。
车料
矩阵,其中元素
是数据点的索引,它是最接近
的
。
如果一个人担心如何处理关系以及诸如此类的事情,也许应该将
纳入其中。 上面的代码似乎有点快,但我确信它可以改进(虽然我没有时间去
或
路线)。所以我仍然对上面的快速和稀疏实现持开放态度。 下面我添加了一个我最终使用的并行版本:
伐教爸