2012-06-21 2 views
0

I 매트릭스찾기 카운트

1  2 
    1  3 
    1  4 
    2  1 
    2  4 
    3  1 

있고 I은 생성 된 매트릭스와 같은 제 열 값으로 행 번호를 찾아야 만

1  3 (number of elements that related to element 1 (2,3,4)) 
    2  2 (number of elements that related to element 2 (1,4)) 
    3  1 (number of elements that related to element 3 (1)) 
+0

[무엇을 시도해 봤습니까?] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

여기에 비슷한 질문이 있습니다. [어떻게 요소 수를 계산할 수 있습니까? 행렬에 주어진 값의?] (http://stackoverflow.com/questions/2880933/how-can-i-count-the-number-of-elements-of-a-given-value-in-a- 행렬) – Amro

답변

0

사용 find(a(:,1)==1) 포함해야 1

+0

비슷하게 find (a (:, 1) == 2)와 find (a (:, 1) == 3) – magarwal

2

가장 쉬운 방법은 사용하는 것입니다 accumarray :

데이터 세트로부터

accumarray 그룹 요소를 각 그룹에 함수를 적용

는 매트랩 도움말에서 촬영. A = accumarray (subs, val)는 subs의 요소를 인덱스로 사용하여 벡터 val의 요소를 누적하여 배열 A를 만듭니다. subs에있는 요소의 위치는 누적 된 벡터에 대해 선택하는 val 값을 결정합니다. subs에있는 요소의 값은 출력에서 ​​누적 된 벡터의 위치를 ​​결정합니다.

이 경우 우리는 모든 요소를 ​​그룹화하고 그 수를 계산해야합니다. numel이 계산합니다. 그런데


, 당신은 전혀 데이터의 두 번째 열을 필요로하지 않습니다

accumarray(A(:,1),zeros(size(A(:,1))),[],@numel) 
+0

을 더 간단하게 사용할 수 있습니다 :'accumarray (A (: 1, 1)' 디폴트 함수는'@ sum'이므로) – Amro

0

이 카운트를 생성하기 위해 배열 인덱싱 및 고유를 사용하여 다른 접근 방식입니다 :

%demo array 
a=[1 1 1 2 2 3]'; 
%get unique elements 
b=unique(a); 
%count and put into matrix 
result=[b sum((a(:,ones(1,length(b))))'==b(:,ones(1,length(a))),2)]; 

result = 

    1  3 
    2  2 
    3  1 
0

당신은 통계 도구 상자에서 표로 기능을 사용할 수 있습니다

>> tabulate(A(:,1)) 
    Value Count Percent 
     1  3  50.00% 
     2  2  33.33% 
     3  1  16.67% 
HISTC를 사용

다른 해결책 :

vals = unique(A(:,1)); 
counts = histc(A(:,1), vals); 

얻어진 매트릭스 :

>> result = [vals counts] 
result = 
    1  3 
    2  2 
    3  1 

이 ACCUMARRAY 다르다/그것의 요소 1에서 시작한다고 가정하지 않는 것을 표로. 무슨 뜻인지 이해하려면 모든 솔루션을 실행하기 전에 AA(:,1) = A(:,1)+10;으로 수정하십시오.