此函数在XY坐标中表示的一组空间点中找到群集。群集基于点之间的距离,并且它不需要预先知道的集群数量。如果两个点之间的距离短于用户定义的距离,则每个点都与最近的相邻点聚集在一起
临界点。
该函数输出基本摘要统计信息(集群,最小,最大和平均群集大小等),屏幕和图表显示了每个集群的集群,质心点和几何中值点。它还创建了两个文本文件,其中包含所有质心点和几何中位点的坐标。输出变量对于每个群集返回质心和几何中位点的XY坐标,以及形成群集的每个点的XY坐标。
用法:
--------
[ClusterScentroids,ClustersGeomedians,Clustersxy] = ClusterXypoints(InputFile,MaxDist,MinClusterSize,方法,MergeFlag);
输入变量的描述:
------------------------------------
- InputFile:fullpath到带有两个列的文本文件:第1列= x值,第2列= Y值
- MaxDist:群集点之间的最大距离。
- MinClusterSersize:每群集的最小点数。
- 方法:将要点添加到现有群集时确定距离计算方法。可能的方法是:'point'(如果它在群集的任何点的“maxdist”距离内,则将一个点添加到现有群集中),'centroid'(如果它在a中,则将一个点添加到现有群集中'集群的质心的“MaxDist”距离)和“几何中位数”(如果在群集的几何中值点的“MaxDist”距离内,则将点添加到现有群集中)。默认方法为“点”。
- MergeFlag:如果设置为“merge”,则在“MaxDist”距离内的群集将合并在一起。距离计算方法由“方法”参数定义。
Yann Marcon(2021)。基于距离的一组XY坐标的聚类(//www.tianjin-qmedu.com/matlabcentral/fileexchange/56150-distance-based-clustering-of-a-set-of-xy-coordinates),Matlab中央文件交换。检索到。
感谢分享 !
伟大的工作,易于使用
@giacomo turco:函数如读取文件中的点坐标。如果要将其修改以直接使用两列的数组读取点,则可以尝试以下步骤:
1.用(没有引号)替换代码的第59行:“功能[群集[群集字体,群集Geomedians,clustersxy] = clusterxypoints(xy,maxdist,minblustersize,方法,mergeflag)”
2.评论第69行。
我尚未测试它,但思考它应该提供工作,只要您的数组只有两列。
一个问题:如何使用此功能我在带有2列的向量中有XY坐标?
提前谢谢你。
GIACOMO.
它比距离制作更多的簇
@carlos ranz:谢谢您分享修改。速度改善是显着的!我更新了代码以包括您的建议。
谢谢你的脚本!
当您的输入数据大小相当大时,我已修改脚本以提高性能。
预先释放可变对的速度index = [index;indexPairs + 1];
indexPairs = 0;
索引= [1];
对于k = 1:kmax
indexPairs = IndexPairs + kmax-k;
if(k
结尾
结尾
对= =(IndexPairs,2);
k = 2:长度(索引)
对(索引(k-1):index(k)-1,:) = [(k:kmax)',(k-1)*那些(kmax-(k-1),1)];
结尾
感谢您提供您的脚本!这将理想地保存了我很多时间,但由于我的输入数据大小相当大,此代码无法正常工作。
我得到的错误是:
使用Internal.stats.pdistmex时出错
要求1×3607444270(26.9GB)阵列超过最大数组大小偏好。创建大于此限制的阵列可能需要很长时间并导致MATLAB变得无响应。有关更多信息,请参阅数组大小限制或首选项面板。
易于使用,工作非常好!
非常有用和良好的记录。谢谢!
为我们正在努力的项目或多或少地工作 - 谢谢
仅在没有至少留下解释的情况下只评定一个明星是苛刻和非建设性的。