How do I avoid creating intermediate variables?

Say I have a vector of data x and a function f(x).
Now say I want to evaluate f(x) only for x>2, so I do:
ind=x>2; y=f(x(ind));
Now say I want to find y>5;
ind2=y>5;
Now how can I use this information to get the x values corresponding to the y>5 values, WITHOUT using this crude method where I create an intermediate variable:
x_intermediate = x(ind1); % I want to avoid creating this
x_answer = x_intermediate(ind2);

 Akzeptierte Antwort

Walter Roberson
Walter Roberson am 30 Mai 2011

0 Stimmen

ind1 = find(x>2);
y = f(x(ind1));
x(ind1(y>5))

Weitere Antworten (2)

Matt Fig
Matt Fig am 30 Mai 2011

0 Stimmen

Is your complaint about the extra typing, or the extra variable in the workspace? If the latter, then one way to avoid this kind of thing in general is:
x_answer = x(ind1); % This will be overwritten.
x_answer = x_answer(ind2);
This strategy will serve you beyond this specific problem.
Andrei Bobrov
Andrei Bobrov am 30 Mai 2011

0 Stimmen

xy = [x f(x)];
out = xy(xy(:,1)>2&xy(:,2)>5,:)

1 Kommentar

AJP
AJP am 30 Mai 2011
Perhaps I should clarify that the x vector is very large. I therefore want to avoid the creation of any extra variables because they essentially just repeat data already stored in x.
Essentially what I want to do is to use the information in ind1 and ind2 to "filter" the x values so I can pass these filtered values to another, later function.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by