0
我有一个非常大的矩阵(750000 x 6),其中我有一个股票价格的时间列。时间间隔不统一,因此我插入了新的时间。由于我只想在工作日的工作时间内包含时间,所以我有一个for循环,用于检查插值时间是否在该范围内,并将这些条目复制到新矩阵中。但是,我的程序需要永久运行(> 10分钟)。这是我的原代码:为MATLAB中的大矩阵优化循环
A = IBM;
times = A(:,1);
incr = t;
uniqday = datevec(times);
uniqday = unique(uniqday(:,1:3), 'rows'); % unique days for data
% Computes interpolated prices at sampling interval
interptimes = (times(1):incr:times(end)).';
% Fractional hours into the day
frac_hours = 24*(interptimes - floor(interptimes));
% Exclude interpolated times outside of trading hours
newtimes = interptimes((frac_hours > 0) & (frac_hours < 19.1));
% Exclude weekends & holidays
newtimesvec = datevec(newtimes);
newtimesvec2 = zeros(length(newtimesvec),6);
for j = 1:length(uniqday)
for i = 1:length(newtimesvec)
if newtimesvec(i,1:3) == uniqday(j,:)
newtimesvec2(i,:) = newtimesvec(i,:);
else %Program always get stuck at this line
end
end
end
所以我想,也许删除条目插的时间阵列中会更快,而不是复制到一个新的矩阵,但是当一个条目被删除,内插的时间序列改变大小,所以这个for循环会导致它访问矩阵之外。我不知道如何解决这个问题。
for i = 1:length(interptimes)
for j = 1:length(uniqday)
if interptimes(j,1:3) == uniqday(j,:)
else
interptimes(j,:) = [];
end
end
end