2014-09-05 3 views
3

나는이 거대한 배열을 가지고 있습니다. 별도의 배열에서 고유 행을 추출했습니다. 이제 각 고유 행의 어커런스를 저장하는 벡터를 만들려고합니다. 내가 어떻게 할 수 있니? histc를 사용하여 시도했습니다. tabulate에 대해 알았지 만 벡터에서만 작동합니다.Matlab을 사용하여 배열의 각 행의 카운트 빈도

x=[62 29 64 
    63 32 61 
    63 32 61 
    63 32 61 
    63 31 62 
    62 29 64 
    62 29 64 
    65 29 60 
    62 29 64 
    63 32 61 
    63 32 61 
    63 29 62 
    63 32 61 
    62 29 64 
    ]; 

uA=unique(x) 
[row, count] = histc(x,unique(x,'rows')) 

나는 다음과 같은 오류가 발생합니다 : Edge vector must be monotonically non-decreasing. 또한 다른 시도의 몇이 오류가 발생했습니다.

답변

6

사용 unique이 방법 -

[unique_rows,~,ind] = unique(x,'rows') 
counts = histc(ind,unique(ind)) 

unqiue_rowscounts 당신이에 관심이있을 수있는 출력 될 것이다 당신의 주어진 데이터가 산출와

-

unique_rows = 
    62 29 64 
    63 29 62 
    63 31 62 
    63 32 61 
    65 29 60 
counts = 
    5 
    1 
    1 
    6 
    1 

보너스. :의 두 번째 사용을 피함으로써 성능을 향상시킬 수 있습니다이쪽으로 -

counts = histc(ind,1:max(ind)); 
+0

오, 나는 이렇게 독특한 방법을 시도했지만,'~'과 특히'ind = [1 4 4 4 3 1 1 5 1 4 4 2 4 1] '대표하고 나는 아이디어를 포기했다. –

+1

@TanatosDaniel 아직받지 못했다면'~'는'출력을 건너 뛰기 '를 의미합니다. 'ind'는 유일성에 따라'x'의 행에 레이블을 붙입니다. – Divakar

+0

'~'는 그런 것을 의미한다고 생각했습니다. mathworks의 '고유 한'기능과 매개 변수에 대한 정보는 적어도 분명하지 않습니다. 나는 그것이 당신을위한 것이 아니라면'ind '가 무엇을 나타내는 지 알지 못했을 것입니다. 감사. –

관련 문제