Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 从矩阵中提取聚类_Matlab - Fatal编程技术网

Matlab 从矩阵中提取聚类

Matlab 从矩阵中提取聚类,matlab,Matlab,假设我有一个矩阵,其中第一列和第二列表示x,y坐标,第三列表示集群ID: 95.0129 5.7891 3.0000 23.1139 35.2868 1.0000 60.6843 81.3166 2.0000 48.5982 0.9861 3.0000 89.1299 13.8891 3.0000 76.2097 20.2765 3.0000 45.6468 19.8722 3.0000 1.8504 60.3792

假设我有一个矩阵,其中第一列和第二列表示x,y坐标,第三列表示集群ID:

95.0129    5.7891    3.0000
23.1139   35.2868    1.0000
60.6843   81.3166    2.0000
48.5982    0.9861    3.0000
89.1299   13.8891    3.0000
76.2097   20.2765    3.0000
45.6468   19.8722    3.0000
 1.8504   60.3792    1.0000
82.1407   27.2188    3.0000
44.4703   19.8814    3.0000
61.5432    1.5274    3.0000
79.1937   74.6786    2.0000
92.1813   44.5096    2.0000
73.8207   93.1815    2.0000
17.6266   46.5994    1.0000
40.5706   41.8649    1.0000
93.5470   84.6221    2.0000
91.6904   52.5152    2.0000
41.0270   20.2647    3.0000
89.3650   67.2137    2.0000

我想使用MATLAB创建带有x,y坐标的单个集群ID的矩阵,例如集群1:
c(1)=[23.1139 35.2868;1.8504 60.3792;17.6266 46.5994;40.5706 41.8649]
给定矩阵,让我们称它为
A
,您可以执行以下操作:

>> A(A(:,3)==1,1:2)
ans =

   23.1139   35.2868
    1.8504   60.3792
   17.6266   46.5994
   40.5706   41.8649

A(:,3)=1
是一个逻辑列向量,对于
A(:,3)
等于1(即集群ID 1)的行,这是正确的。接下来,我们索引
A(x,1:2)
,使用
x
逻辑列向量选择行,并
1:2
选择列。

我将扩展Cris的答案s.t。您可以使用arrayfun一次自动创建所有集群:

C = arrayfun(@(id) A(A(:,3)==id, 1:2), unique(A(:,3)), 'UniformOutput', false)
这将为每个集群创建一个单元阵列

如Cris所述,如果您跳过了群集ID或类似的内容,则有可能将其存储在映射中:

cluster_ids = unique(A(:,3));
cluster_map = containers.Map(cluster_ids, arrayfun(@(id) A(A(:,3)==id, 1:2), cluster_ids, 'UniformOutput', false));

然后使用id
集群地图(3)

访问它,请发布问题,这些问题可能对其他人有用,并且可能有一些历史价值。很好!我想补充一点:如果
C{n}
必须是集群
n
的坐标,那么使用
1:max(A(:,3))
而不是
unique(A(:,3))
。这是一个有效的注释。然而,我只是假设id都是给定/使用的。如果这不是小事,我想我会把它们放进一个容器里;当我考虑X时,Y坐标代表X中的节点的位置,Y-Prand和I假设每个簇中的节点基于重叠相关。我想计算相关系数,首先计算节点之间的欧氏距离,然后使用指数模型计算相关系数,例如c(1,1)=exp(-d(1,1)),然后我可以得到每个簇的矩阵。非常感谢。