compare the absolute value of each element from two matrices

15 次查看(过去 30 天)
I have two matrices A and B with the size NxM and I want to compare the absolute value of each element for the two matrices and return the bigger value and then to store the real value in a new matrix.
Any suggestions please
Many thanks in advance
  3 个评论
Jack_111
Jack_111 2014-11-25
for example a = [1 -2 -3; 4 5 -6] and b = [3 2 1; 8 9 -3] and when I will compare the absolute values and store them in another matrix using c = max(abs(a),abs(b)); that means the output will be
c = [3 2 3 ; 8 9 6] but I want it to return c = [3 2 (doesn't matter) -3 ; 8 9 -6] (in the case where they are equal, it doesn't matter what it will return).
I hope you got my point. I don't want the absolute value to be registered but just the real value which is in our example (-6 and -3) nut the absolute value is just to compare
Image Analyst
Image Analyst 2014-11-25
OK. Good. Calling it the "real" value instead of the "max" value was a major oversight initially. But now that you've clarified it, it looks like you now have two correct solutions. Thanks for accepting one of them. You can also vote for both of them too, even though you can accept only one.

请先登录,再进行评论。

采纳的回答

Guillaume
Guillaume 2014-11-25
编辑:Guillaume 2014-11-25
Concatenate A and B along the third dimension, get the second output of max along the 3rd dimension of the absolute of that 3d matrix to get the z index. The tricky bit is then using that z value to select A or B. Summing each matrix multiplied by a logical matrix should do it:
a = [1 -2 -3; 4 5 -6]
b = [3 2 1; 8 9 -3]
ab = cat(3, a, b);
[~, idx] = max(abs(ab), [], 3);
c = a.*(idx==1) + b.*(idx==2)

更多回答(1 个)

the cyclist
the cyclist 2014-11-25
编辑:the cyclist 2014-11-25
absA = abs(A);
absB = abs(B);
I'm not sure what you mean by "compare ... and return the real value". Larger? Smaller? Difference?
  2 个评论
Jack_111
Jack_111 2014-11-25
编辑:Jack_111 2014-11-25
for example a = [1 -2 -3; 4 5 -6] and b = [3 2 1; 8 9 -3] and when I will compare the absolute values and store them in another matrix using c = max(abs(a),abs(b)); that means the output will be
c = [3 2 3 ; 8 9 6] but I want it to return c = [3 2 (doesn't matter) -3 ; 8 9 -6] (in the case where they are equal, it doesn't matter what it will return).
I hope you got my point. I don't want the absolute value to be registered but just the real value which is in our example (-6 and -3) nut the absolute value is just to compare

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by