周期边界条件下的Python-DBSCAN聚类

2024-04-24 02:58:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我是个笨蛋,可能我做的事情对我来说太大了,但是我需要这个来做我的TESI,请原谅我的无知。 我的目标是使用sklearn.cluster.DBSCAN,只在x,y上实现周期边界条件。 我发现的最简单的方法是在每个坐标上使用scipy函数pdist,对周期边界进行校正,然后合并结果以获得可以由DBSCAN分解的距离矩阵(以平方形式)。你知道吗

L=40 #box lenght
for d in range(data.shape[1]):
  # find all 1-d distances
  pd=pdist(data[:,d].reshape(data.shape[0],1))
  # apply boundary conditions (excluding z distances)
  if (d!=2):
    total+=pd**2


# transform the condensed distance matrix...
total=pl.sqrt(total)
# ...into a square distance matrix
square=squareform(total)
db=DBSCAN(eps=4, metric='precomputed').fit(square)

运行代码时收到以下错误:

valueerror: a 2-dimensional array must be passed

有什么问题? 有没有其他简单的方法来达到我的目标?你知道吗


Tags: 方法目标data事情matrixdbscandistancetotal
1条回答
网友
1楼 · 发布于 2024-04-24 02:58:51

Squreform生成一维数组中的压缩距离矩阵。这是一种内存效率更高的表示方式—但前提是您从一开始就使用它,而不是以后再转换为它。你知道吗

不管怎样,这个表单只供scipy使用,sklearn不使用。但是由于python没有一个强大的类型系统,它不能很容易地检测到这个错误。但是你需要去掉squareform调用!你知道吗

但我怀疑你对边界条件的处理是你想要的。现在您似乎完全忽略了第三个轴,并对其余轴执行常规距离条件。你知道吗

相关问题 更多 >