搜索向量和基于值的求和

时间:2014-05-01 16:21:31

标签: matlab

我有3个载体。

第一个单元被称为'代码'是25 x 1向量,其中每个值都是唯一的。 第二个向量称为'country'是n x 1双向向量。 第三个向量称为'sales'是n x 1双向向量。 n是约。 3500。第二个和第三个向量将始终包含相同的行数。

我想要做的是在第一个向量中获取每个代码的总销售额。请参阅下面的示例。

 codes        
 3659
 7852
 3662
 1448


 country        sales
 3659           10
 1448           96
 3659           15
 3662           12
 3662           2

我想要的结果,

 country        sales
 3659           25
 1448           96
 3662           14
 7852           0

2 个答案:

答案 0 :(得分:3)

你可以使用accumarray功能来完成这项工作,这正是这种工作的目的:

[~, ii] = ismember(country,codes);
totalSales = accumarray(ii, sales, [], @sum, 0);
result = [ codes totalSales ];

请注意,这会将结果排序为原始代码,与您的示例不同。

答案 1 :(得分:2)

for i = 1:length(codes)
    newcountry(i) = codes(i);
    newsales(i) = sum(sales(country==codes(i)));
end

country==codes(i)给出一个用零填充的向量,除非在country = codes(i)的索引处,在这种情况下有一个1. sales(country==codes(i))返回{{1}的销售条目}与country相同。 codes(i)会返回sum(sales(country==codes(i)))country相同的索引的所有销售额的总和。