6 views (last 30 days)

Show older comments

Hi everybody.

I have a Matrix with 5 rows and 27 columns M(5,27).

-465016.671990511 -7739.99191635794 -341535.491595863 -85371.1969301907

-5903.99881269675 -7859.03942441580 1327.06121931661 -2689.99261151688

-9775.84903413543 -24436.8700789172 10631.1822509721 -5457.55830920490

-115990.998278705 -14946.7388544833 -102.707785969593 -22516.0893903143

-49215.4580227008 -42337.1765610354 -22878.6399931591 -17776.5021930945

looks like above. I don't want the columns (using 0 index) where the absolute value in the fourth row is bigger than at least 3 absolute values of the other 4 values in the particular column (values in row 1:3 and 5). From the above shown columns it should give me a result like a=[0,1,1,0] because only in the first and fourth column the values in the 4th row are bigger than at least three other values in that particulare column ( first column: 4th value 115990 > 465016, 5903, 9775, 49215; fourth column: 4th value 22516> 2689, 5457, 17116)

What is the easiest way to write a code for this? Using the if else statement? Thanks already in advance!

ME
on 18 Feb 2020

For the example in your question, the following will work:

[~,c] = size(A);

a = ones(1,c);

for col = 1:c

if((sum(abs(A(4,col)) > abs(A([1:3,5],col)))) >=3)

a(col) = 0;

end

end

You don't need an else statement if you pre-allocate the a array as being all ones.

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

Start Hunting!