Matlab 如何根据值的接近程度拆分矩阵?

Matlab 如何根据值的接近程度拆分矩阵?,matlab,matrix,split,Matlab,Matrix,Split,假设我有一个矩阵a: A = [1 2 3 6 7 8]; 我想根据这些数字的相对接近程度将这个矩阵分为子矩阵。例如,上述矩阵必须分为: B = [1 2 3]; C = [6 7 8]; B = [5 6 4 4 3]; C = [11 12 12]; D = [30 33 32]; 我知道我需要为这个分组定义一些标准,所以我想我应该取这个数字和下一个数字的绝对差,并定义一个限制,在这个限制下一个数字可以在一个分组中。但问题是,我无法确定差异的静态限制,因为矩阵和子矩阵将发生变化 另一个

假设我有一个矩阵
a

A = [1 2 3 6 7 8];
我想根据这些数字的相对接近程度将这个矩阵分为子矩阵。例如,上述矩阵必须分为:

B = [1 2 3];
C = [6 7 8];
B = [5 6 4 4 3];
C = [11 12 12];
D = [30 33 32];
我知道我需要为这个分组定义一些标准,所以我想我应该取这个数字和下一个数字的绝对差,并定义一个限制,在这个限制下一个数字可以在一个分组中。但问题是,我无法确定差异的静态限制,因为矩阵和子矩阵将发生变化

另一个例子:

A = [5 11 6 4 4 3 12 30 33 32 12];
因此,这必须分为:

B = [1 2 3];
C = [6 7 8];
B = [5 6 4 4 3];
C = [11 12 12];
D = [30 33 32];

这里,根据值的接近程度将矩阵分为三部分。因此,这个矩阵的标准与前一个不同,尽管我想从每个矩阵中得到的是相同的,根据其数字的接近程度来分离它。我有没有办法指定一组通用条件,使标准动态而非静态?

恐怕我的回答对你来说太迟了,但也许未来有类似问题的读者可以从中获益

一般来说,您的问题需要解决。然而,也许有一个更简单的方法来解决你的实际问题。以下是我的方法:

  • 首先,输入
    A
  • 为了找到区分“类内”和“类间”元素的标准,我使用计算
    a
    的相邻元素之间的差异
  • 然后,我计算了所有这些差异
  • 最后,我计算了所有差异的指数,这些差异大于或等于中位数的三倍,最小差异为
    1
    。(根据实际数据,这可能会被修改,例如改用
    mean
    )。这些是索引,您必须在其中“拆分”已排序的输入
  • 最后,我为每个“子矩阵”设置了两个具有起始索引和结束索引的向量,以使用的方法获得具有所有所需“子矩阵”的单元数组
  • 现在,代码来了:

    %对输入进行排序,并计算相邻元素之间的差异
    AA=排序(A);
    d=差值(AA);
    %计算所有差异的中位数
    m=中值(d);
    %找到“差异显著更大”的指数,
    %例如,大于或等于中位数的三倍
    %(最小差值应为1)
    idx=查找(d>=最大值(1,3*m));
    %设置适当的开始和结束索引
    start_idx=[1 idx+1];
    end_idx=[idx numel(A)];
    %使用所需向量生成单元阵列
    out=arrayfun(@(x,y)AA(x:y),start_idx,end_idx,'UniformOutput',false)
    
    由于未知数量的可能向量,我想不出将它们“解包”到单个变量的方法

    一些测试:

    A=
    1   2   3   6   7   8
    出去=
    {
    [1,1] =
    1   2   3
    [1,2] =
    6   7   8
    }
    A=
    5   11    6    4    4    3   12   30   33   32   12
    出去=
    {
    [1,1] =
    3   4   4   5   6
    [1,2] =
    11   12   12
    [1,3] =
    30   32   33
    }
    A=
    1   1   1   1   1   1   1   2   2   2   2   2   2   3   3   3   3   3   3   3
    出去=
    {
    [1,1] =
    1   1   1   1   1   1   1
    [1,2] =
    2   2   2   2   2   2
    [1,3] =
    3   3   3   3   3   3   3
    }
    

    希望有帮助

    我已经完成了对该问题的研究,但这有助于我更好地理解聚类分析,感谢您的回答:)