0

我有一个这样的数组:

1003    1007    0.0140589588522423
1059    1185    0.0336635172202602
1003    1093    0.0403056531253910
1003    1111    0.0417787840566580
1059    1127    0.0437157438475326
1082    1092    0.0532154519263457
1076    1185    0.0584688899071887
1003    1129    0.0585907987209575
1003    1045    0.0626826958352425
1003    1070    0.0660757861128676
1003    1014    0.0662929607751338

第一列是点一个名称,第二列是点两个名称,第三列是范围内每两个点之间的距离[0, 1]。如果我们在第三列有更高的值,我们有更大的距离,如果我们在第三列有更低的值,我们提到的点之间的距离更小。我有这个数据超过 20,000 点。现在我想要一个模式(图表)和更多信息,以便更好地了解点的距离或假设位置。例如,我希望在点附近聚集在一起,然后再次将附近的集群聚集到更大的集群。如何使用 MATLAB 做到这一点?我有所有点对的这些数据。

4

1 回答 1

1

对于接近精确的配置,更简单的解决方案之一是使用cmdscale()( https://www.mathworks.com/help/stats/cmdscale.html ) 来查找给定距离限制的潜在配置。

给定一个点之间的距离向量,cmdscale()将返回一个维度n*p矩阵,其中最小化。npp

您必须将数据重新组织为n*n每个点之间的距离矩阵,但是要获得此类数据的任何体面的图形表示,无论如何都必须这样做。

distance = [0.0 0.1 0.2;
            0.1 0.0 0.3;
            0.2 0.3 0.0];
Y = cmdscale(distance); 
plot(ones(3,1),Y,'o'); % In this case my solution is 1 dimensional

输出

对于 20,000 个数据点,您肯定需要更高的维度(希望您的数据已经被限制为 2D 或 3D)。如果它不限于 3 维,Y则必须减少配置矩阵(请参阅https://www.mathworks.com/help/stats/cmdscale.html以获取帮助)并且您将失去一些准确性(但对于任何比例维数据中的精确表示)。

如果您对更多概率表示感兴趣,我发现在利用动态链接物理/重力基于权重将节点拉在一起的网络引擎中取得了更大的成功,但我还没有看到任何在 MATLAB 中动态构建的东西。

于 2016-11-23T22:40:57.560 回答