2011-11-20 5 views
1

특정 사람들 목록의 나이를 보유하는 배열 age=[16 17 25 18 32 89 43 55]이 있다고 가정합니다. 또한 groups=[1 1 2 1 3 2 1 4]이라는 두 번째 배열은 각각의 사람이 속한 그룹을 나타냅니다. 즉, 연령이 55 세인 사람이 그룹 4의 유일한 사람이고, 그룹 1에 3 명이 있습니다.Matlab : 배열의 원소를 다른 배열에 더하기

각 그룹의 연령대 합계. 즉,이 경우에 얻고 자하는 결과는 4 개의 요소의 배열입니다. 첫 번째 항목은 그룹 # 1 (16 + 17 + 18 + 43)에 속한 사람들의 연령대 합계를 포함하고 두 번째 항목은 그룹 # 2 (23 + 89) 등에 속한 사람들의 연령대

나는 for 루프로 이것을 수행하는 방법을 알고 있지만 어떤 변형을 사용하여 sum 또는 비슷한 것을 만들 수있다. MATLAB의 벡터 최적화를 활용 하시겠습니까? 다음과 같이

+1

또한 합계 16 + 17 + 18에 43이 필요합니다. – petrichor

+0

@ İsmailArı - 고정 – olamundo

답변

4

의 코드 @ 이스마일의 대답은 괜찮지 만, 당신은 또한이 시도 할 수 :

>> accumarray(groups', age') 
ans = 
    94 
    114 
    32 
    55 

를 내가 열심히을 얻기 위해 찾아 정확히 무엇으로부터 accumarray의 문서에서 감사하지만, 이것은 간단한 사용법의 좋은 예입니다. 효과적으로 사용하는 방법을 배울 가치가 있습니다. 효과가 있으면 매우 강력합니다. arrayfun보다 훨씬 빠릅니다 (더 큰 예제에서 사용하는 경우).

2

당신은 uniquearrayfun 사용할 수 있습니다 :

arrayfun(@(x) sum(age(groups==x)), unique(groups)) 
관련 문제