获取矩阵中 n 个最大元素的索引
假设我有以下矩阵:
01 02 03 06
03 05 07 02
13 10 11 12
32 01 08 03
我想要前 5 个元素的索引(在本例中为 32、13、12、11、10)。在 MATLAB 中执行此操作最简洁的方法是什么?
Suppose I have the following matrix:
01 02 03 06
03 05 07 02
13 10 11 12
32 01 08 03
And I want the indices of the top 5 elements (in this case, 32, 13, 12, 11, 10). What is the cleanest way to do this in MATLAB?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以通过多种方法来执行此操作,具体取决于您想要如何处理重复值。以下是使用
sort
:这是一个解决方案,它查找 5 个最大的唯一值,然后查找所有等于这些值的元素(这可以如果有重复值,则应大于 5),使用
unique
和
ismember
:There are a couple ways you can do this depending on how you want to deal with repeated values. Here's a solution that finds indices for the 5 largest values (which could include repeated values) using
sort
:Here's a solution that finds the 5 largest unique values, then finds all elements equal to those values (which could be more than 5 if there are repeated values), using
unique
andismember
:如果您有一个相当大的数组并且只想要其中的几个元素。这将是我的解决方案。
我认为它应该比排序解决方案更快并且对 RAM 的要求更低。
If you have a rather big array and only want a few elements out of it. This would be my solution.
I think it should be faster and less RAM demanding than the sort solution.
您还可以在 matlabcentral 上找到 matlab 问题的良好答案。我在寻找同样的东西时在那里找到了一个很好的 mex 实现。
它是由 Bruno Luong 使用 C-MEX 实现的部分快速排序算法完成的。复杂度为 O(n + k.log(k)),其中 n 是数组的大小,k 是要选择的元素的数量。对于大尺寸输入,它比 SORT 或多次调用 MIN/MAX 更快。支持多维功能
http://www.mathworks.com/matlabcentral/fileexchange/23576-最小最大选择
You can find good answers to matlab questions also on matlabcentral. I found a good mex implementation there while searching for the same thing.
It is done by Bruno Luong using a partial quick-sort algorithm implemented with C-MEX. The complexity is O(n + k.log(k)), where n is the size of the array, and k is the number of elements to be selected. It is faster than SORT or multiple call of MIN/MAX for large size inputs. Multidimensional capability supported
http://www.mathworks.com/matlabcentral/fileexchange/23576-minmax-selection
在 MATLAB ≥ R2017b 中,您可以使用
maxk
出于此特定目的。In MATLAB ≥ R2017b, you can use
maxk
for this specific purpose.