2017-11-01 1 views
2

각 고유 행 벡터가 행렬에서 발생하는 횟수를 식별해야합니다.
의 우리는 다음의 행렬이 가정 해 봅시다 : 우리는 다음 두 [1 0 0] and [0 1 0]이 발생할 것으로 집계 수있는 방법Octave를 사용하여 배열에서 각 고유 벡터의 인스턴스 수를 계산하는 가장 효율적인 방법은 무엇입니까?

U = [1 0 0, 
    1 0 1, 
    0 1 0] 

:

A = [1 0 0, 
    1 0 1, 
    0 1 0, 
    1 0 0, 
    0 1 0] 

'독특한'기능을 사용하여을, 우리는 같은 고유 한 행 벡터를 식별 할 수 [1 0 1]은 단 한 번 나타 납니까?
'count'와 'sum'의 다양한 응용 프로그램을 시도했지만 전체적으로 벡터가 아닌 벡터 요소에서 작동합니다. 이 질문에 대한 귀하의지도 주셔서 대단히 감사드립니다.

옥타브 및 MATLAB R2014a에서

답변

3

및 이전 버전은 uniquehist를 사용할 수 있습니다

[U,~,c] = unique(A, 'rows'); %unique rows are given by 'a' 
occ=hist(c); occ=occ(occ~=0); %number of occurrences of each row is given by 'occ' 

당신은 MATLAB R2014b 이상이있는 경우

가 (권장) histcountshist을 감가 상각에 사용되는 마지막 줄을 교체합니다. Luis Mendo이 제안

occ = histcounts(c);   

또는 최선을/가장 빠른 모든의, 당신은 accumarray를 사용할 수 있습니다. Octave's documentation infact는 귀하의 질문과 매우 유사한 예입니다. 또한

occ = accumarray(c, 1); 
+2

'OCC = accumarray (c 1)'또는'OCC = 합 (c == 고유 (c) '1.),'(I 한 빨리되는 몰라) –

+1

@LuisMendo는'A = randi ([1 10], 10000000,3)에 대해'timeit '을 사용하여 검사했으며''histcounts'는 0.2040,'accumarray'는 0.1131'을 필요로했습니다. 은 메모리 제약으로 인해 'sum'과 'unique'를 확인할 수 없습니다. '누적 배열 '을 가진 당신의 솔루션이 더 좋습니다. –

+0

다음은 완벽하게 작동합니다. 고맙습니다! >> [U, ~, c] = 고유 (A, '행'); >> occ = accumarray (c, 1); –

관련 문제