matlab中矩阵的分组元素

matlab中矩阵的分组元素,matlab,matrix,grouping,Matlab,Matrix,Grouping,我有一个矩阵a=[1 2 4 4 8 8 8 4 1 7 8 9]我想创建一个新的矩阵,它在a中有相同数量的元素 我有两个1,一个2,三个4,两个7,五个8和一个9 我的新矩阵应该是[数字;每个数字的数量] newmatrix = [1 2 4 7 8 9; 2 1 3 2 5 1] 如何从一个矩阵创建新矩阵 标准推荐方法:使用和: 另一种可能性是使用进行计数,然后使用提取值并获得索引: s = sparse(1,A,1); result = [find(s); nonzeros(s).']

我有一个矩阵
a=[1 2 4 4 8 8 8 4 1 7 8 9]
我想创建一个新的矩阵,它在a中有相同数量的元素

我有两个1,一个2,三个4,两个7,五个8和一个9

我的新矩阵应该是[数字;每个数字的数量]

newmatrix = [1 2 4 7 8 9; 2 1 3 2 5 1]
如何从一个矩阵创建新矩阵

  • 标准推荐方法:使用和:

  • 另一种可能性是使用进行计数,然后使用提取值并获得索引:

    s = sparse(1,A,1);
    result = [find(s); nonzeros(s).'];
    
    对于小型
    A
    ,第二种方法似乎更快,但第一种方法通常是推荐的方法


  • 您可以通过以下方式进行组合:

    newmatrix = [unique(A); histc(A, unique(A))]
    
    result = reshape([uA; histc(A, uA)],[],2);
    
    unique
    函数返回向量中所有数字的列表,而
    histc
    对原始向量中出现的唯一值进行计数

    请注意,对于大向量,将更快,因为它只调用
    unique
    一次。然而,如果你是喜欢一行的人之一,这个答案应该可以

    如果向量可能是垂直或水平的,则上述操作将生成
    2nx1
    向量,而不是
    nx2
    矩阵。一种可能是这样称呼:

    newmatrix = [unique(A); histc(A, unique(A))]
    
    result = reshape([uA; histc(A, uA)],[],2);
    

    ... 但是如果我的基准测试结果是正确的,那么对于较大的
    A
    ,速度大约是前者的两倍。无论如何,我喜欢这个方法=)@RobertP。是的,这更像是一种好奇心。我编辑了答案,指出标准和推荐的方法是第一种