Julia中的聚类与距离计算

Julia中的聚类与距离计算,julia,hierarchical-clustering,Julia,Hierarchical Clustering,我有一个n个坐标点的集合(x,y,z)。它们存储在一个nx3矩阵M中 Julia中是否有内置函数来计算每个点与其他点之间的距离?我正在处理少量的点,因此计算时间并不太重要 我的总体目标是运行一个聚类算法,所以如果有一个聚类算法,我可以看看,不需要我首先计算这些距离,请建议太多。下面是我想对其执行集群的数据示例。显然,我只需要对z坐标做这个 要计算距离,请使用距离 给定一个矩阵X,可以计算列之间的成对距离。这意味着您应该提供输入点(n个对象)作为矩阵的列。(在您的问题中,您提到了nx3矩阵,因此您

我有一个n个坐标点的集合(x,y,z)。它们存储在一个nx3矩阵M中

Julia中是否有内置函数来计算每个点与其他点之间的距离?我正在处理少量的点,因此计算时间并不太重要

我的总体目标是运行一个聚类算法,所以如果有一个聚类算法,我可以看看,不需要我首先计算这些距离,请建议太多。下面是我想对其执行集群的数据示例。显然,我只需要对z坐标做这个


要计算距离,请使用
距离

给定一个矩阵
X
,可以计算列之间的成对距离。这意味着您应该提供输入点(n个对象)作为矩阵的列。(在您的问题中,您提到了nx3矩阵,因此您必须使用
transpose()
函数对其进行转置。)

下面是一个关于如何使用它的示例:

>using Distances  # install with Pkg.add("Distances")

>x = rand(3,2)

3x2 Array{Float64,2}:
 0.27436   0.589142
 0.234363  0.728687
 0.265896  0.455243

>pairwise(Euclidean(), x, x)

2x2 Array{Float64,2}:
 0.0       0.615871
 0.615871  0.0     

如您所见,上面返回了
X
列之间的距离矩阵。如果需要,您可以使用其他距离度量,只需检查文档中的包。

为了完整地回答@niczky12的问题,Julia中有一个名为的包,正如名称所示,它本质上允许您执行集群

示例
kmeans
算法:

>>> using Clustering         # Pkg.add("Clustering") if not installed

>>> X = rand(3, 100)         # data, each column is a sample
>>> k = 10                   # number of clusters

>>> r = kmeans(X, k)
>>> fieldnames(r)
8-element Array{Symbol,1}:
:centers    
:assignments
:costs      
:counts     
:cweights   
:totalcost  
:iterations 
:converged
结果存储在包含上述字段的kmeans(
r
)的返回中。两个可能最有趣的字段:
r.centers
包含kmeans算法检测到的中心,
r.assigments
包含100个样本中每个样本所属的集群

在同一个包中还有其他几种聚类方法。请随意深入阅读文档并应用最适合您需要的文档


在您的情况下,由于您的数据是一个
nx3
矩阵,您只需将其转置:

M = rand(100, 3)
kmeans(M', k)

有几种不同的聚类算法。你想运行什么样的集群?我有一个数据集,给出了两条独立悬挂电缆的(x,y,z)坐标。它们仅沿z轴(高度)不同。因此,我想基于z坐标进行聚类。但是,使用直线切割群集的群集不起作用,因为上悬链线的最低点可能低于下悬链线的最高点。我目前正在将悬链线拆分为小块,直线型集群可以工作,但这不是一个很好的解决方案。谢谢。现在,当我在另一个有更多数据的问题上尝试这个方法时,我得到了内存不足错误。知道如何在大量数据上计算距离矩阵吗?