有没有办法更快地处理这个循环?

时间:2016-01-20 03:52:00

标签: matlab loops if-statement matrix filter

我有以下代码,需要很长时间才能完成它...我不认为它是一个无限循环,但它如下:

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变为正数,这将继续,但符号的变化不会对每行迭代的总和产生任何影响。

谢谢,

0 个答案:

没有答案