How can I loop each line of a script as the conditional in a new if statement?

1 visualización (últimos 30 días)
I have a large number of conditional statements (4280) that are in a script. From each conditional statement I need to analyze and manipulate it into a specific matrix and then have it put the results from each conditional state into one final matrix. The analysis and steps are the same for each conditional statement so a loop should do the trick, i just cant figure out how to put the initial script into each loop. I believe something like fgetl should work, but cant figure it out. Any help is appreciated. THANKS!
%Simplified Example
i=1;
j=1;
X=rand(10,3);
%Conditionals from the script
x(i,1)>0.5 & x(i,2)<0.5
x(i,1)>0.5 & x(i,2)>0.5
%...And so on with more complexity
for i=1:10
if (lines from the script)
x2(j,:)=x(i,:)
j=j+1;
xmean=grpstats(x2,3) %for the conditional in line 1
end
%then repeat this over all the lines into a matrix of all the values and conditionals.
%then have a final matrix of something like ('conditional number','true of each conditional','value')
  2 comentarios
dpb
dpb el 28 de Abr. de 2015
I can't follow from the description; need more specifics and fewer generalizations of just what the conditions and lines are referring to.
The two conditionals above are identical as far as my old eyes can tell and don't need any loops; simply use as a conditional logical address. If you mean you have written expressions like the above and want to compute those dynamically, that's a little different and generally is frowned upon as that's eval. There's normally "a better way" but w/o more specifics not sure we can come up with the right answer here.
How above a small subset but something that can be run to show input/output for a sample case that can test ideas out on? Surely if there are only a handful but representative that'll be as good as 5000 for algorithm design.
Bus141
Bus141 el 29 de Abr. de 2015
%Here would be a similar model
x=zeros(20,3);
%Creating an example matrix
x(1:3:20,1)=1;
x(2:4:20,2)=1;
x(:,3:5)=rand(20,1);
%in the actual matrix the values are of no pattern, the above is done for demonstration
%I am trying to get the values from column 3 through 5 given they meet a set of conditional criteria from columns 1 and 2.
%Below would be a similar script line
x.1>0 & x.2>0 %criteria i=1
x.1<1 & x.2>0 %criteria i=2
x.1<1 & x.2<1 %criteria i=3
%And so on, with similar code though lines equal just over 4000 options
%From this I need to analyze the data that have met each of the conditional criterias above
%Analyzing the data that meet criteria i.
z=mean(x,1);
%In algrebraic notation this would be an index for each criteria from the script
f=z(:,3); %this would be f subscript i
p=z(:,4:5); %p subscript i
%final matrices
F(i,:,:)=f %with an entry for each analyzed f into the final F
P(i,:,:)=p %with an entry for each analyzed p into the final P matrix
%Ideally looping the previous 12 lines for all conditional criteria
I am interested in looping the analzying and formatting for each criteria that is met all into 2 final 3D matrices, with 1 dimension of each matrix for each critieria condition. I have all of the conditional criteria written (though long and ugly), any help in preventing me from having to re-write the code for each line of conditional criteria code.

Iniciar sesión para comentar.

Respuestas (1)

Joseph Cheng
Joseph Cheng el 28 de Abr. de 2015
Editada: Joseph Cheng el 28 de Abr. de 2015
Well.... I too am not entirely sure what you're trying to accomplish but if the formatting of your conditional script is always in the format "x(i,1){operator}{number} & x(i,2){operator}{number}" then we can use sscanf to parse out the conditions for if statements or to a switch/case. the pattern can be adapted to cover more complex conditions but without an example i'll only use it in the example below:
ind=1;
string = ['x(i,1)>0.5 & x(i,2)<0.5';'x(i,1)>0.5 & x(i,2)>0.5']
A = sscanf(string(ind,:),['x(i,1)%1s%f & x(i,2)%1s%f'])
which would return
A =
62.0000
0.5000
60.0000
0.5000
where 62 and 60 are the decimal representation of < and >. regexp() would possibly be better to capture more complicated cases but haven't thought about it toomuch since there isn't an example
This would get you away from using the frowned upon eval

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by