Arrays 查找数组最大值的索引
如何在MATLAB中找到一维数组的2个最大值的索引?我的是一个包含不同分数列表的数组,我想打印最高的两个分数。要获得两个最大元素的索引:使用的第二个输出获得排序后的索引,然后选择最后两个:Arrays 查找数组最大值的索引,arrays,matlab,Arrays,Matlab,如何在MATLAB中找到一维数组的2个最大值的索引?我的是一个包含不同分数列表的数组,我想打印最高的两个分数。要获得两个最大元素的索引:使用的第二个输出获得排序后的索引,然后选择最后两个: x = [3 2 5 4 7 3 2 6 4]; [~, ind] = sort(x); result = ind(end-1:end); 在这种情况下, result = 8 5 要获取两个最大元素的索引,请使用的第二个输出获取已排序的索引,然后选择最后两个: x = [3 2 5 4
x = [3 2 5 4 7 3 2 6 4];
[~, ind] = sort(x);
result = ind(end-1:end);
在这种情况下,
result =
8 5
要获取两个最大元素的索引,请使用的第二个输出获取已排序的索引,然后选择最后两个:
x = [3 2 5 4 7 3 2 6 4];
[~, ind] = sort(x);
result = ind(end-1:end);
在这种情况下,
result =
8 5
正如@LuisMendo所建议的,您可以使用:
[B,I] = sort(array,'descend');
这将为您提供变量B
中数组的排序版本,以及I
中原始位置的索引,这些索引从最高到最低排序。因此,B(1:2)
为您提供了最高的两个值,I(1:2)
为您提供了您可以使用的数组中的索引,正如@LuisMendo所建议的:
[B,I] = sort(array,'descend');
这将为您提供变量B
中数组的排序版本,以及I
中原始位置的索引,这些索引从最高到最低排序。因此,B(1:2)
为您提供最高的两个值,I(1:2)
为您提供数组中的索引
我将使用O(k*n)
解决方案,其中k
是您要查找的最大值的数量,而不是O(n log n)
:
这仅在k
小于logn
时才可行。事实上,如果k>=3
我会把它放在一个循环中,这可能会冒犯一些人的敏感度 我将使用O(k*n)
解决方案,其中k
是您要查找的最大值的数目,而不是O(n log n)
:
这仅在k
小于logn
时才可行。事实上,如果k>=3
我会把它放在一个循环中,这可能会冒犯一些人的敏感度 使用排序
并选择最后两个值Y,谢谢,但正如我所做的排序一样,随着索引的变化,您能否更具体一些?所需的输出是什么?值、索引或两者?@Spen I的可能重复与建议的重复不一致,因为那里的解决方案只给出一个索引,这确实非常容易,第二个输出是min
和max
。获取第二个最大值需要扩展副本的答案(参见比克的答案)或完全不同的方法(参见Luis的sort
方法)。使用sort
并选择最后两个值谢了,但正如我所做的排序一样,索引正在变化,你能说得更具体些吗?你想要的结果是什么?值、索引或两者?@Spen I的可能重复与建议的重复不一致,因为那里的解决方案只给出一个索引,这确实非常容易,第二个输出是min
和max
。获得第二个最大值需要对副本的答案进行扩展(参见Bicker的答案)或完全不同的方法(参见Luis的sort
方法)。