Изменение значений индексов по отношению к массиву после проверки на равенство - PullRequest
0 голосов
/ 25 сентября 2018

Я использую Matab 2014a, у меня есть 3 массива rx, ry и rz, содержащих значения корреляции, я извлекаю индекс max каждого массива следующим образом:

[~, idx] = max(rx);
[~, idy] = max(ry);
[~, idz] = max(rz);

Эти 3 индекса должны бытьотличается, поэтому я проверяю равенство между этими 3-мя начальными значениями, что мне нужно, если idx==idy || idx==idz || idy==idz, как я могу взять второй максимум rz для idz, и то же самое для ry и idy.Есть идеи?

Заранее спасибо

1 Ответ

0 голосов
/ 25 сентября 2018

В следующем примере показано, как проверить индекс максимального значения и выбрать следующее, если они равны:

rx = [9, 8, 7, 6, 5];
ry = [4, 9, 3, 2, 1];
rz = [4, 3, 2, 1, 0];

[~, idx] = max(rx);
[~, idy] = max(ry);
[~, idz] = max(rz);

equal = 1; % flag
while equal
    if idx==idy
        disp(['Max index for ry is the same: ' num2str(idy)]);
        disp ('Changing ry...');
        % Remove the max value
        ry(idy) = 0;
        [~, idy] = max(ry);
        disp (['Recalculating idy for new max: ' num2str(idy)])
    end

    if idx==idz || idy==idz
        disp(['Max index for rz is the same: ' num2str(idz)]);
        % Remove the max value
        rz(idz) = 0;
        [~, idz] = max(rz);
        disp (['Recalculating idz for new max: ' num2str(idz)])
    end

    % Check the changes made
    if idx==idy || idx==idz || idy==idz
        equal = 1;
    else
        equal = 0;
    end
end

Во время первой итерации цикла while вы получите

Максимальный индекс для rz одинаков: 1

Пересчет idz для нового максимума: 2

, так как и idy (4), и idx (9) (максимумы) имеютиндекс 1. Во время второй итерации:

Максимальный индекс для rz такой же: 2

Пересчет idz для нового максимума: 3

Значения idy и idz равны, поэтому снова idz пересчитывается.После этого 3 индекса отличаются:

idx = 1 idy = 2 idz = 3

...