내가 병목 현상을 조금 작동하지만 일부 코드를 가지고, 나는 그것을 빠르게하는 방법을 알아 내려고 붙어있어. 그것은 반복적이며, 벡터화하는 방법을 이해할 수 없습니다.버킷 팅 알고리즘
나는 시계열 데이터를 나타내는 2 차원 배열, 발스을 가지고있다. 행은 날짜이고, 열은 시리즈와 다릅니다. 나는 그것에 대한 다양한 작업 (합계, 평균 등)을 수행하기 위해 데이터를 몇 달에 걸쳐 버킷하려고합니다. 여기에 내 현재 코드입니다 : 내가 그렇게 여러 번 호출하기 때문에
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'] (https://www.mathworks.com/help/matlab/ref/accumarray.html) ... –