我有一个叫做数据的矩阵。它包含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或匿名函数,并且就像这种性质的问题有一种更有效的方式(并希望以其他方式)
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 :(得分:5)
使用cellfun
或arrayfun
并非比简单循环更有效。要利用矢量化,您需要使用纯双数组。
假设您的数据存储在单元格数组中,unique
与accumarray
相结合即可:
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]