可以使用Matlab高效循环还是需要很多循环?

时间:2015-08-17 02:40:38

标签: matlab for-loop

for i = 1:length(startIdx)
    for j = 1:length(date(startIdx(i):cutoffIdx(i)))
        k = date(startIdx(i):cutoffIdx(i));
        try
            shortIdx(j)=find(and(and(and(and(and(jam>=1.2,jam<=2.3),expiration==xDates(i)),option_type=='c'),jamSym==1),quote_date==k(j)),1);
        catch
            warning('Not present')
            shortIdx(j)=0;
        end
    end
end

我们说i = 1:4。在第一次通过我,一切都很好。但是当i = 2时,我会覆盖i为1时创建的存储的shortIdx数据。j是每个i的长度,k是每个i的日期。我被绊倒的地方是try语句的最后一部分

quote_date==k(j)

因为当i变为2时,j会重置为1.因此,即使ki的正确日期集,我只是覆盖了shortIdx变量,而不是附加到它。有没有办法让我有效地解决这个问题?或者我是否需要为每个i创建一个独立的for循环?谢谢。

1 个答案:

答案 0 :(得分:0)

保存到由ij编制索引的2D数组中。在内循环的每次传递

shortIdx(i, j) = someObscenelyLongAndStatement;

为了提高效率,您应该在循环之前预先分配shortIdx

或者,您可以创建一个长1D数组,更新索引将是

shortIdx(length(startIdx)*(i- 1) + j) = ...
祝你好运!