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。是的,这更像是一种好奇心。我编辑了答案,指出标准和推荐的方法是第一种