计算点之间的欧氏距离时的记忆错误

时间:2017-12-31 13:17:52

标签: python numpy cluster-analysis dbscan

我想找到DBSCAN的eps。 我有一组点,需要计算从每个点到另一个点的距离。如果形状的数组是(2267436,2),那么找到近点和最小点。 以下是我的数据:

xy= [[  177963.16728699  2506663.75713195]
 [  176147.50406716  2502422.34894945]
 [  178480.33178874  2507299.83467826]
 ..., 
 [  231205.88139267  2684014.30324774]
 [  231207.81085397  2684014.52219471]
 [  231214.870296    2684054.8263628 ]]

我正在尝试这些方法:

dist = scipy.spatial.distance.cdist(xy, xy,'euclidean')

np.sqrt((np.square(npxy[:,np.newaxis]-npxy).sum(axis=2)))

dist=scipy.spatial.distance.pdist(npxy)
d_matrix = scipy.spatial.distance.squareform(dist)

我正在为所有人获取MemoryError。 有没有解决方法来解决它?

1 个答案:

答案 0 :(得分:1)

通过一些非常简单的数学计算,你可以发现你不能将所有O(n²)距离存储在内存中。

如果你一次只计算一个点的距离,你就可以了。

另外,尝试使用索引将运行时间从O(n²)减少到可管理的范围。

或者您使用更现代的算法,如OPTICS。