2015-06-19 6 views
0

У меня есть две матрицы одинакового размера.суммирование столбцов матрицы на основе другой матрицы

First matrix: weights 800 x 1250 
Second matrix: country_code 800 x 1250 

Каждая колонка является наблюдением.

Что я хотел бы сделать, это суммировать каждый столбец в матрице весов на основе country_code. Пример ниже может объяснить это лучше

Weight       country_code 

20 25 30 15 20  12 12 12 12 12 
40 10 20 5 10  10 10 10 10 10 
10 35 25 50 40  5 5 5 5 5 
30 30 25 30 30  12 12 12 12 12 

List of Country Codes  Result Matrix  
5       10 35 25 50 40      
10      40 10 20 5 10     
12      50 55 55 45 50 

Мой код выглядит следующим образом, но не дает правильных ответов.

int_ccy - is the number of unique country codes 
ccy - is a vector of the unique country codes 

for t = 1 : int_ccy 
    wgts(t, :) = nansum(Weight(country_code==ccy(t, 1), :));  
end     
+0

Является country_code всегда постоянна столбцам? – brodoll

+0

Да, это постоянный столбец – mHelpMe

ответ

1

Следующие должны решить эту проблему, хотя есть более хороший способ сделать это с помощью логической индексации (я думаю), но я не могу вспомнить с верхней части моей головы:

for t = 1 : int_ccy; 
    wgts(t,:) = sum(weight .* (country_code == ccy(t, 1)), 1);  
end 
1

Вот один векторизованный подход:

%%\ Sample Variables 
Weight=[20 25 30 15 20; 40 10 20 5 10; 10 35 25 50 40; 30 30 25 30 30]; 
country_code=repmat([12;10;5;12],1,4) 
list=[5;10;12]; 

%%\ Sum each column in the weights matrix based on the country_code 
[~, countrylines, ~]=intersect(country_code,list) 
sum(Weight(countrylines,:),1) 
2

Поскольку все столбцы country_code равны, это может быть сделано в одной строке с помощью матричного умножения.

Пусть

Weight  = [ 20 25 30 15 20   
       40 10 20 5 10   
       10 35 25 50 40   
       30 30 25 30 30 ]; 
country_code = [ 12 12 12 12 12 
       10 10 10 10 10 
       5 5 5 5 5 
       12 12 12 12 12 ]; 

Тогда

Result = bsxfun(@eq, country_code(:,1).', unique(country_code(:,1))) * Weight; 
Смежные вопросы