if else statement for elemental comparison
显示 更早的评论
Hello,
I have 2 matrices, a & b, both 1024x1024. 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
4 个评论
Rik
2018-1-24
Use logical indexing.
a_part=a(a>b);b_part=b(a>b);
You are aware that a mean of means is not the same as a mean of all values?
Emily Pendleton
2018-1-24
编辑:Emily Pendleton
2018-1-24
Benjamin Kraus
2018-1-24
You need to convert your matrix into a vector first. One way to do that is using :.
mean(ba(:))
Emily Pendleton
2018-1-24
采纳的回答
更多回答(1 个)
Benjamin Kraus
2018-1-24
You need to calculate both answers, then recombine the matrix using logical indexing. Something like this:
ab = (a-b)./(a+(2*b));
abavg = mean(ab(:), 'omitnan')
abSD= std2(ab);
ba = (b-a)./(b+(2*a));
baavg = mean(ba(:), 'omitnan')
baSD= std2(ba);
out1 = ab;
out1(b>a) = ba(b>a); % logical indexing to replace only values where |b>a|
avg = abavg;
avg(b>a) = baavg(b>a); % logical indexing to replace only values where |b>a|
SD = abSD;
SD(b>a) = abavg(b>a); % logical indexing to replace only values where |b>a|
2 个评论
Benjamin Kraus
2018-1-24
Actually, looking back at your code a little closer, this may be what you are trying to do:
ab = (a-b)./(a+(2*b));
abavg = mean(ab(a>b), 'omitnan')
abSD= std2(ab(a>b));
ba = (b-a)./(b+(2*a));
baavg = mean(ba(b>a), 'omitnan')
baSD= std2(ba(b>a));
Also, don't forget about places where a == b.
Emily Pendleton
2018-1-25
类别
在 帮助中心 和 File Exchange 中查找有关 Time Series Events 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!