필터 지우기
필터 지우기

Given a couple of vectors with priorities, is there a fast built-in function to find the index of the largest value?

조회 수: 2 (최근 30일)
Consider that there exist three 10-dimensional vectors p1, p2, and p3, and the priority is given in order p1>p2>p3.
I want to find an index that is the largest in p1, the largest in p2 in case of a tie in p1, the largest in p3 in case of a tie in both p1 and p2, and randomly selected in case of a tie in all p1, p2, and p3.
That is, the code can be constructed as follows for given p1, p2, p3.
p1 = [1, 9, 3, 8, 4, 9, 1, 9, 5, 9]; % given
p2 = [5, 15, 6, 7, 10, 10, 5, 15, 1, 15]; % given
p3 = [1, 25, 3, 4, 11, 4, 1, 25, 99, 15]; % given
ind_p1 = (p1 == max(p1)); % Output: ind_p1 = [0, 1, 0, 0, 0, 1, 0, 1, 0, 1]
p2_prime = p2.*ind_p1; % Output: p2_prime = [0, 15, 0, 0, 0, 10, 0, 15, 0, 15]
ind_p2 = (p2_prime == max(p2_prime)); % ind_p2 = [0, 1, 0, 0, 0, 0, 0, 1, 0, 1]
p3_prime = p3.*ind_p2; % p3_prime = [0, 25, 0, 0, 0, 0, 0, 25, 0, 15]
ind_p3 = find(p3_prime == max(p3_prime)); % ind_p3 = [2, 8]
ind = ind_p3(randi(length(ind_p3))); % ind = 2 or 8
result = [ind, p1(ind), p2(ind), p3(ind)]; % result = [2, 9, 15, 25] or [8, 9, 15, 25]
I think the code for the above purpose will be used a lot in a wide variety of places.
Are there any quick (or code-readable) built-in MATLAB functions to produce the above results?

답변 (1개)

Bruno Luong
Bruno Luong 2020년 8월 15일
편집: Bruno Luong 2020년 8월 15일
p1 = [1, 9, 3, 8, 4, 9, 1, 9, 5, 9]; % given
p2 = [5, 15, 6, 7, 10, 10, 5, 15, 1, 15]; % given
p3 = [1, 25, 3, 4, 11, 4, 1, 25, 99, 15]; % given
[pmax,loc] = sortrows([p1;p2;p3]');
result = [loc(end),pmax(end,:)]

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by