在相等检查之后更改索引值而不增加数组的最大值

时间:2018-09-25 14:39:45

标签: arrays matlab indexing max

我正在使用Matab 2014a,我有3个包含相关值的数组rx,ry和rz,我像这样提取每个数组的最大值的索引:

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

这3个索引应该是不同的,所以我检查这3个索引之间的相等性,我要的是idx==idy || idx==idz || idy==idz,如何为idz取rz的第二个最大值,对ry和idy取相同的值。有什么想法吗?

预先感谢

1 个答案:

答案 0 :(得分:1)

下面的示例显示如何检查最大值的索引,以及如果相等则选择下一个:

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。之后,这三个索引是不同的:

  

idx = 1   闲散= 2   idz = 3