2016-11-02 2 views
2

데이터라는 행렬이 있습니다. 여기에는 3 개의 열, 회사 이름, 회사 값 & 회사 통화가 포함되어 있습니다.셀 배열의 값을 요약하기 위해 루핑하는 대신 익명의 함수 사용

Name  Value  Currency 
    ABC  10   USD 
    MNO  5   JPY 
    PLM  3   USD 
    NJK  7   EUR 

가 나는 익명 함수를 사용하여 내가 루프를 사용하여이 작업을 수행 할 수 있지만이 가능 알고

Currency Value 
EUR   7 
JPY   5 
USD   13 

, 나의 대답은 다음과 같을 것이다 각 통화에 대한 총 가치 합계를 필요 그렇다면 어떻게?

업데이트 - 원래의 게시물과 같은 추가 정보는 아래 내 솔루션, 작동되는 정보

부족했다. 그러나 내가 본 사람들은 cellFun 또는 익명 함수를 사용하고 하락보다 효율적인 방법이처럼 (그리고 다른 방법을 좋아하는 것) cellfun 또는 arrayfun보다 더 효율적이지 못하다 사용이 자연을

val  = cell2mat(data(:, 2));    % double - value 
sedols = data(:, [1 3]);     % cell - name (1st column) and currency (2nd column) 

ccy  = unique(sedols(:, 2)); 
fx_exp = zeros(length(ccy(:, 1)), 1); 

for n = 1 : length(ccy(:, 1)) 
    index   = strmatch(ccy(n, 1), sedols(:, 2)); 
    fx_exp(n, 1) = sum(val(index)); 
end 
+0

귀하의 행렬은 셀 어레이 또는 테이블은 다음과 같습니다

데이터가 accumarray와 함께 unique 갈 방법입니다, 셀 배열에 저장되어있는 가정? 변수를 실행 가능한 방식으로 정의하십시오. – thewaywewalk

+0

루프로 해결하려는 시도를 적어주십시오. 그래서 우리는 당신이 무엇을하고 있는지 더 잘 알고 있습니다. [mcve] – Adriaan

+0

과 '데이터'란 무엇입니까? – thewaywewalk

답변

5

의 문제 간단한 루프. 벡터화를 이용하려면 이중 배열으로 작업해야합니다.

data = { 
    'ABC' 10 'USD' 
    'MNO' 5 'JPY' 
    'PLM' 3 'USD' 
    'NJK' 7 'EUR' }; 

[a,b,subs] = unique(data(:,3)) 
vals = [data{:,2}]; 
currsum = accumarray(subs,vals) 
out = [data(b,3) num2cell(currsum)] 

out = 

'EUR' [ 7] 
'JPY' [ 5] 
'USD' [13] 
관련 문제