How to find multliple values in larger arrays where the value two below is the opposite sign (+ve/-ve)
1 view (last 30 days)
Show older comments
I work with larger arrays (100x100) and am trying to develop a script which finds values where the value 2 below is the opposite sign. For example in the array below it would be the '40' and '-4' value.
10 10 10 10 10 10
10 10 40 10 10 10
10 10 10 10 10 10
10 10 -2 10 10 10
10 10 10 10 10 -4
How do I display these values as a correct/incorrect matrix i.e. if a 1 is shown, this is where there is a value with the value two below is the opposite sign. For our above matrix it would be...
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
Thanks for any answers
Answers (2)
Guillaume
on 15 Nov 2014
Assuming you made a mistake about your -4. Use sign to get the sign of the matrix, and compare them with an offset of 2 on the rows:
m = [10 10 10 10 10 10
10 10 40 10 10 10
10 10 10 10 10 10
10 10 -2 10 10 10
10 10 10 10 10 -4];
s = sign(m);
o = [s(1:end-2, :) ~= s(3:end, :); zeros(2, size(m, 2))];
0 Comments
Star Strider
on 15 Nov 2014
Edited: Star Strider
on 15 Nov 2014
The (40, -4) isn’t consistent because there is nothing ‘below’ -4 unless you wrap it.
The ‘R’ matrix here gives you a logical matrix indexing the values that are 2 rows above the negative numbers:
A = [10 10 10 10 10 10
10 10 40 10 10 10
10 10 10 10 10 10
10 10 -2 10 10 10
10 10 10 10 10 -4];
R = circshift(A<0,[-2 0]);
producing:
R =
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 1
0 0 0 0 0 0
0 0 0 0 0 0
0 Comments
See Also
Categories
Find more on Multidimensional Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!