【发布时间】:2009-05-14 12:43:35
【问题描述】:
我有一些有效的代码,但有点瓶颈,我一直在试图弄清楚如何加快它的速度。它在一个循环中,我不知道如何对其进行矢量化。
我有一个二维数组 vals,它代表时间序列数据。行是日期,列是不同的系列。我试图按月存储数据以对其执行各种操作(求和、平均值等)。这是我当前的代码:
allDts; %Dates/times for vals. Size is [size(vals, 1), 1]
vals;
[Y M] = datevec(allDts);
fomDates = unique(datenum(Y, M, 1)); %first of the month dates
[Y M] = datevec(fomDates);
nextFomDates = datenum(Y, M, DateUtil.monthLength(Y, M)+1);
newVals = nan(length(fomDates), size(vals, 2)); %preallocate for speed
for k = 1:length(fomDates);
下一行是瓶颈,因为我多次调用它。(循环)
idx = (allDts >= fomDates(k)) & (allDts < nextFomDates(k));
bucketed = vals(idx, :);
newVals(k, :) = nansum(bucketed);
end %for
有什么想法吗?提前致谢。
【问题讨论】:
-
这应该使用
accumarray...
标签: matlab vectorization