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

问题描述 投票:0回答:1

我想找到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。有什么办法可以搞清楚吗?

python numpy cluster-analysis dbscan
1个回答
1
投票

通过一些非常简单的数学运算,您可以发现无法将所有OF(n²)距离存储在内存中。

如果你一次只计算一个点的距离,你会没事的。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.