我想知道是否有一种有效的方法来根据{中的grouping/summing
column
(以年为单位)来计算matrix
的{{1}} serial number date
值{1}}。为了说明我的观点,假设数据如下:
column
` 人们期望得到:
Matlab version 2013
* PS:使用 737421 3
737106 -1
737222 4
736084 7
726105 -2
726442 4
函数可以在6
7
2
的最新版本中解决此问题
预先感谢
答案 0 :(得分:1)
这是我的方法:
x = [737421 3
737106 -1
737222 4
736084 7
726105 -2
726442 4]; % data
[~, ~, u] = unique(datestr(x(:,1), 'yyyy'), 'rows', 'stable'); % convert to years as
% a 2D char array, and then get unique labels of each year (row) preseving order
y = accumarray(u, x(:,2)); % compute sums grouped by those labels
答案 1 :(得分:0)
您可以仅索引日期并对值进行求和,这很简单。问题将是要搜索的数组的大小。如果它很大,则可以从date
的数据中取出一棵树作为节点,并且可以将idx作为该节点上的值放入数组中。然后在树中搜索开始日期和结束日期,这将给您在数组中求和的索引范围。生成树和搜索很容易,并且在线有示例。
x = [737421 3
737106 -1
737222 4
736084 7
726105 -2
726442 4]; % data
idx = x(:,1) >= 737421 & x(:,1) <= 737222;
out = sum(x(idx,2));
编辑:
% Just updating to give one of the values to be correct.
% There would have to be a for loop to check every
% year range so @Luis Mendo is the best solution.
idx = x(:,1) >= 737106 & x(:,1) <= 737421; % index for each year
out = sum(x(idx,2));