Creating an efficient for loop

2 Ansichten (letzte 30 Tage)
Cary
Cary am 17 Aug. 2015
Kommentiert: Star Strider am 17 Aug. 2015
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
Let's say i = 1:4. On the first pass through i, everything is fine. But when i = 2, I am overwriting the stored shortIdx data I created when i was 1. j is the length of each i, and k is the dates for each i. Where I get tripped up is the last part of the try statement
quote_date==k(j)
because when i turns to 2, j is reset to 1. So even though k is the correct set of dates for i, I am simply overwriting the shortIdx variable, instead of appending to it. Is there a way for me to solve this efficiently? Or do I need to create an independent for loop for each i? Thank you.

Akzeptierte Antwort

Star Strider
Star Strider am 17 Aug. 2015
I can’t run your code, but if ‘shortIdx’ is a single value (likely an index, considering the find call), one (probably the easiest) solution is to create a matrix out of ‘shortIdx’ so it increments with both ‘i’ and ‘j’:
shortIdx(i,j) = ...;
and then refer to it by both indices in your catch block.
  2 Kommentare
Cary
Cary am 17 Aug. 2015
Beautiful, Star. As always, thanks for your help!
Star Strider
Star Strider am 17 Aug. 2015
As always, my pleasure!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Tags

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by