MATLAB Answers

how to find the max element in each column and row and replace it with 1. If conflicting elements occur, look for the next max element.

조회 수: 4(최근 30일)
Raja Zufar
Raja Zufar 16 Jun 2020
댓글: Raja Zufar 19 Jun 2020
hallo, i have this code and this code select the high value element but it just select the element with different column. help me finish the code so the element can be selected with different columns and rows. thankss
MX= zeros(U,D);
MB= zeros(U,D);
for y=1:U
[U,D] = find(MP==x)

  댓글 수: 4

표시 이전 댓글 수: 1
Raja Zufar
Raja Zufar 16 Jun 2020
i try used different matrix because that have done different matrix result row and column if running the code, output would be like this:
MP = [8 9 1;
3 5 7;
4 6 2]
MPouput = [0 1 0;
0 0 1;
1 0 0]
Raja Zufar
Raja Zufar 17 Jun 2020
first, MP selected the max value of the matrix i assume [9 P(1,2)] and change it to '1'
second, MP finds the max value but cannot be the same as row and column P (2,1) and MP select [7 P(2,3) and change it to '1'
third, MP find the max valu but cannot be the same as row and column P(2,1) and P(2,3) and MP select [4 P(3,1) and change it to '1'

댓글을 달려면 로그인하십시오.

채택된 답변

Rajil Kansal
Rajil Kansal 17 Jun 2020
I am assuming that you want to find max element in each column and row and replace them with 1. Also only a single 1 should be present in each row and column in final output, If conflicting element occurs look for next max element.
This could be achieved by this code:
MP = [8 9 1;3 5 7;4 6 2];
[row,col] = size(MP);
for i= 1: row
x = max(max(MP));
[r,c] = find(MP==x);

  댓글 수: 2

the cyclist
the cyclist 17 Jun 2020
Please see my answer, which points out that this solution is not valid for some input matrices.
(Or possibly I misunderstood what you wanted.)

댓글을 달려면 로그인하십시오.

추가 답변(2개)

the cyclist
the cyclist 17 Jun 2020
편집: the cyclist 17 Jun 2020
Blatantly stealing ideas from Ameer's and Rajil's solutions here. But I think there are some potential issues with those, specifically:
  • doing an in-place solution
  • assuming that the original input matrix doesn't have elements that are less than 1
For example, I don't think those solutions will work on this input:
rng default
MP = rand(4)-0.5;
I think this solves both issues mentioned above:
[row,col] = size(MP);
MP_output = zeros(row,col);
for i= 1: row
x = max(MP(:)); % If R2018b or later, could use x = max(MP,[],'all');
[r,c] = find(MP==x);
MP_output(r,c) = 1;
The output you want is given by the variable MP_output.

  댓글 수: 3

Raja Zufar
Raja Zufar 17 Jun 2020
Thanks sir for the new code :). I use "rand" only to assume the value of the matrix, the actual value of my matrix is big positive. and forgive me for making you confused
the cyclist
the cyclist 18 Jun 2020
I'm glad the other solution is fine for you.
In general, good programming practice would be to either
  • use an algorithm that works on more general inputs, OR
  • make sure you comment your code, indicating the input requirement
That way, someone else who uses your code (or maybe just "future you") will not be confused why the algorithm doesn't work if they try on different input.
You may be thinking "I'm only going to use this code on this one small program, or homework, so I don't need to worry about this", but I think it is still worthwhile to practice these habits.
Raja Zufar
Raja Zufar 19 Jun 2020
Im really thankfull for the advice because im new at matlab code. And i dont know if its okay im asking the question and put in like 300 line main.m file and 20 function code. I think it gonna make people who answering confuse

댓글을 달려면 로그인하십시오.

Ameer Hamza
Ameer Hamza 17 Jun 2020
편집: Ameer Hamza 17 Jun 2020
Try this
MP = [8 9 1;
3 5 7;
4 6 2];
MPouput = zeros(size(MP));
for i=1:size(MP,1)
[~, idx] = max(MP(i, :));
MPouput(i, idx) = 1;
MP(:, idx) = 0;
>> MPouput
MPouput =
0 1 0
0 0 1
1 0 0




Community Treasure Hunt

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

Start Hunting!

Translated by