MATLAB Answers

Finding equal values, between values, greater than and lesser than values of a matrix based on some values

1 view (last 30 days)
mr mo
mr mo on 7 Nov 2017
Edited: mr mo on 18 Dec 2017
Hi. Suppose I have matrix A of size (m*n) e.g.
A = [12 44
93 43
128 44
145 41
180 41
220 40
280 40];
and the a,b,c and d values e.g.
a = 10
b = 95
c = 145
d = 290
As you know
a < A(1,1)
A(2,1) < b < A(3,1)
c = A(4,1)
d > A(7,1)
I want Matlab to do above process and search the a,b,c and d values in the A(:,1) and tell me that the a,b,c and d values are lesser than or greater than or equal or lying between what members of A(:,1).
Thanks for your help.

  4 Comments

Show 1 older comment
mr mo
mr mo on 7 Nov 2017
I want to know the values a,b,c,d is lying between what members of A(:,1)? or in case of equality I want to know these values a,b,c,d are equal to what members of A(:,1)? and I want to know a,b,c or d is lesser than A(first,1) or not ? and I want to know a,b,c or d is greater than A(end,1) or not ?
James Tursa
James Tursa on 7 Nov 2017
You did not answer my request. Please provide the exact variable outputs you would like based on your example. I.e., at the end of your code, what variables would you like as output and what specific values would they contain for your example above?
mr mo
mr mo on 7 Nov 2017
for this example I want to reach these outputs if we consider that the a,b,c,d values are given to the code respectively, so I want these out puts respectively:
0 12
93 128
145
280 1000
which means a is lesser than 12 and b is between 93 and 128 and c is equal to 145 and d is between 280 and 1000.

Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 7 Nov 2017
A = [12 44
93 43
128 44
145 41
180 41
220 40
280 40];
a = 10;
b = 95;
c = 145;
d = 290;
ii_interval_of_1st_column_of_A = discretize([a,b,c,d],[-inf;A(:,1);inf]);

  12 Comments

Show 9 older comments
Andrei Bobrov
Andrei Bobrov on 8 Nov 2017
ab = 180;
AA = [-inf;A(:,1);inf];
Aout = hankel(AA(1:end-1),AA(end-1:end));
ii = discretize(ab,AA);
out = Aout(ii,:);
t = bsxfun(@eq,out,ab);
out(xor(t(:,1),t(:,2)),2) = nan;
mr mo
mr mo on 18 Dec 2017
@Andrei Bobrov: Hi. Thanks again for your help.
I run your above code in my matlab m-file and I must run this code in for loops, but this code is taking to much running time.
For example I run the for loops 5 times and its running time is given by Run and Time tool in Matlab in the below image.
The red digits are showing the running time of that line in second.
I must run your code 1000 times and the running time will be more than 10 hours.
Is there any possibilities to change this code to decreasing the running time?
Thanks you very much.

Sign in to comment.

More Answers (0)