在Matlab中对相似值进行分组

Ano*_*ous 1 matlab grouping

如果我有一个包含值的数组,[6712, 7023, 7510, 7509, 6718, 7514, 7509, 6247]我想要4组相似的数字,以便输出是4个矩阵:

[6247]
[6712, 6718]
[7023]
[7510, 7509, 7514, 7509]
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

Amr*_*mro 6

我相信你要找的术语是聚类.例如,我们可以应用Kmeans算法将数据分组为4个集群:

X = [6712, 7023, 7510, 7509, 6718, 7514, 7509, 6247];
[IDX,C] = kmeans(X, 4, 'EmptyAction','singleton');
G = cell(4,1);
for i=1:4
    G{i} = X(IDX==i);
end 
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果之一:

>> G{:}
ans =
        7510        7509        7514        7509
ans =
        7023
ans =
        6247
ans =
        6712        6718
Run Code Online (Sandbox Code Playgroud)

通常这适用于更多点(也适用于多维数据)

  • @eat:我不是在试图争论谁的解决方案是最好的..我试图以更系统和更通用的方式解决问题,而不是临时解决方案(如果数组中的数字改变了怎么办?).聚类具有以下优点:它试图在数据中发现自然发生的组(以无人监督的方式). (2认同)