MATLAB: If else statement for elemental comparison

elemental comparisionif statementmatrix manipulation

Hello,
I have 2 matrices, a & b, both 1024×1024. I am trying to create an "if/else" statement where each element in the same position in the two matrices are compared to each other. Depending on which value is greater, the subsequent analysis is performed. I have the following code, but it is currently running with "any" value in the matrix. Is there a way to do if/else on an elemental basis? I then want to find the average of all the resulting values (here, average of "ab" and "ba.") Is there a better way to do this than my current methods? This is what I have so far (and thanks for your help!):
a = load('0.txt');
b = load('9.txt');
if any(a > b)
ab = (a-b)./(a+(2*b));
abavg= mean(mean(ab,'omitnan'), 'omitnan')
abSD= std2(ab);
else
ba = (b-a)./(b+(2*a));
baavg= mean(mean(ba,'omitnan'), 'omitnan')
baSD= std2(ba);
end

Best Answer

The logical indexing shouldn't be used in combination with an if-statement. Let me give you a small example:
a=[3 5 6];
b=[5 4 8];
%then a>b results in [false true false] (or [0 1 0])
%a([0 1 0]) is 5, so a(a>b) is 5
%a(a<b) is [3 6]
That is called logical indexing, because you use a logical array to index another array.
The code below should solve your problem.
%dummy data
a=rand(1024);
b=rand(1024);
%create shorthand arrays with logical indexing
a1=a(a>b);
a2=a(a<=b);
b1=a(a>b);
b2=a(a<=b);
ab = (a1-b1)./(a1+(2*b1));
abavg = mean(ab(:), 'omitnan');
abSD= std2(ab);
ba = (b2-a2)./(b2+(2*a2));
baavg = mean(ba(:), 'omitnan');
baSD= std2(ba);