This question already has answers here:
How to find the index of the n smallest elements in a vector
(2个答案)
7年前关闭。
有没有一种有效的方法来找到在Matlab中长度为n的向量中的第m个最小数字?我必须使用sort()函数吗?感谢致敬!
函数
一旦遇到第一个满足条件的元素,该操作就会停止,如果数组很大并且您发现的值恰好远离结尾,则可以节省大量时间。
我还想回顾@woodchips在this SO discussion中已经说过的与您的问题有些相关的内容:
加快诸如排序之类的基本内置算法的最佳方法是获得更快的硬件。它也将加快其他一切的速度。 MATLAB已经在内部使用优化的代码以高效的方式做到这一点。这样说来,也许GPU附加组件也可以改善这一点...
编辑:
值得一提的是,在Muster的评论中添加了一个名为nth_element的FEX文件,该文件是C++的MEX包装,将为您所需的
(2个答案)
7年前关闭。
有没有一种有效的方法来找到在Matlab中长度为n的向量中的第m个最小数字?我必须使用sort()函数吗?感谢致敬!
最佳答案
编辑2 :正如Eitan指出的那样,答案的第一部分不是解决找到最小的第m个值的问题,而是关于最小值之后的第m个元素的问题。剩下的答案仍然是……Eitan的敏锐度为+1。
尽管开始时sort
可能非常有效,但是您可以尝试看看find
是否会更好。例如:
id=find(X>min(X),m,'first');
id(end) % is the index of the smallest m-th element in X
函数
find
已添加功能,可让您查找满足某些条件的“第一个”或“最后一个”元素。例如,如果要查找n
数组中的第一个X
元素小于值y
,请使用find(X<y,n,'first')
一旦遇到第一个满足条件的元素,该操作就会停止,如果数组很大并且您发现的值恰好远离结尾,则可以节省大量时间。
我还想回顾@woodchips在this SO discussion中已经说过的与您的问题有些相关的内容:
加快诸如排序之类的基本内置算法的最佳方法是获得更快的硬件。它也将加快其他一切的速度。 MATLAB已经在内部使用优化的代码以高效的方式做到这一点。这样说来,也许GPU附加组件也可以改善这一点...
编辑:
值得一提的是,在Muster的评论中添加了一个名为nth_element的FEX文件,该文件是C++的MEX包装,将为您所需的
O(n)
时间提供解决方案。 (类似于@DDD指向的内容)10-06 12:54