我有以下代码,需要很长时间才能完成它...我不认为它是一个无限循环,但它如下:
Y = zeros(1069,30658);
D1 = LagOp({0,1,1,1},'Lags',[0,1,2,1]);
for n = 2:30658;
for j = 2:1063
if filter(D1,Ret((D1.Degree + j),n),'Initial',Ret(2:D1.Degree,n)) < 0;
Y(j+3,n) = -1*Ret(j+3,n);
else
Y(j+3,n)=Ret(j+3,n) ;
end
end
end
基本上我想翻转矩阵中当前元素的符号,如果前面的3个元素加起来小于0.否则不管它。可能是...... else语句导致麻烦吗?
编辑:我想出了一种更有效的方法,但我正在努力找出如何将其更改为前面的3个值,而不是使用以下代码:
for n = 1:30658
Y(:,n) = RET(:,n);
t = conv(Y(:,n), [1 1 1], 'valid');
mask = [false(3,1); t(1:end-1)<0];
Y(mask,n) = -Y(mask,n);
end`
所以,例如,如果我在 -1 -2 -3 -4 -5 -6 -1 -2 3 -2 -1 给出的数组中有一些数字,那么在数字-4将查看前3个值的总和(-1 - 2 - 3 <0),然后改变前面的值3的符号,因此-1变为正数,这将继续,但符号的变化不会对每行迭代的总和产生任何影响。
谢谢,