# choosing values with criteria from a set of values given

3 views (last 30 days)
ker fang fang on 12 Jan 2015
Answered: Guillaume on 12 Jan 2015
hi, i need some help here. can someone teach me how to do the following?
for example, i have a set of values a = [ 1 5 6 10 15], then i have another set of values b = [ 1 0.8 0 -0.8 -1.8] , another set c = [3 2.4 0 -2.4 -5.4].
how do i do when i want the answer to be 'a' if the values in c is greater than a or 'b' if the values in c is less than a?
in this example the expected ans should be 'd' [ 1 0.8 0 -0.8 -1.8] ? how do i make that?

Azzi Abdelmalek on 12 Jan 2015
out=a
out(c<a)=b(c<a)

Stalin Samuel on 12 Jan 2015
a = [ 1 5 6 10 15], b = [ 1 0.8 0 -0.8 -1.8] c = [3 2.4 0 -2.4 -5.4]
a1=sum(a) b1= sum(b) c1=sum(c) if c1>b1 result=a elseif c1<a1 result=b end
ker fang fang on 12 Jan 2015
hi, but i want to display the values, instead of adding them up.

Guillaume on 12 Jan 2015
Use logical indexing. The expression c>a returns a logical array the same size as a and c with 1 where c is greater than a and 0 otherwise.
If you use this logical array to index into another array (e.g. a), then you only get those value of this other array for which the logical array is 1. Hence
a(c>a)
returns only those values of a where c is greater than a.
One possible solution is thus:
d = b
d(c>a) = a(c>a);
Note that you haven't said what should happen when a is equal to c, the above code assumes you want b.