我正在使用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取相同的值。有什么想法吗?
预先感谢
答案 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