lar*_*ara 5 hierarchical-clustering julia
我有一个形式为(x,y,z)的n个坐标点的集合.它们存储在nx 3矩阵M中.
Julia中是否有内置函数来计算每个点与每个点之间的距离?我正在使用少量积分,因此计算时间不是很重要.
我的总体目标是运行一个聚类算法,所以如果有一个我可以看到的聚类算法,不要求我先计算这些距离,请同样建议.我想要执行聚类的数据示例如下.显然我只需要为z坐标做这个.
要计算距离,请使用Distances 包裹.
给定矩阵,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
Run Code Online (Sandbox Code Playgroud)
如您所见,上面返回列之间的距离矩阵X.如果需要,您可以使用其他距离指标,只需查看包的文档即可.
仅仅为了完整的@ niczky12答案,Julia中有一个名为Clustering的软件包,正如其名称所示,它允许您执行集群.
一个示例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
Run Code Online (Sandbox Code Playgroud)
结果存储在r包含上述字段的kmeans()的返回值中.这两个可能是最有趣的领域:r.centers包含由kmeans算法检测到的中心,并r.assigments包含100个样本中的每一个所属的集群.
同一个包中还有其他几种聚类方法.您可以随意浏览文档并应用最适合您需求的文档.
在您的情况下,由于您的数据是N x 3矩阵,您只需要转置它:
M = rand(100, 3)
kmeans(M', k)
Run Code Online (Sandbox Code Playgroud)