在数组中查找 n 个最小值
Posted
技术标签:
【中文标题】在数组中查找 n 个最小值【英文标题】:Find n minimum values in an array 【发布时间】:2013-01-24 08:29:54 【问题描述】:我正在使用 Matlab 2012a。
我有一个由 k 个单元组成的数组(比如 1000 个)。我需要找到这个数组的 5 个最低值,并且需要对 X 和 Y 中的这些值进行平均。
有人知道怎么做吗?
【问题讨论】:
您对算法有疑问吗?你用的是什么编程语言? 我编辑了,我的错。我正在使用 Matlab 2012a 你的数据结构是什么?您提到“数组”和“单元格”以及“X”和“Y”。假设您有数组 X 和 Y,我创建了一个答案 - 但是重新阅读您的问题我实际上不确定您有什么...您能澄清一下吗? 有比排序更有效的方法。谷歌类似"find highest k values"
。 This 似乎很有用。
【参考方案1】:
使用minmaxselection
MATLAB MEX 包,专门针对这个问题进行了优化:
a = [2,3,4,7,56,4,21, 64, -2];
mink(a, 2)
<< ans =
<< -2 2
mink(a,4)
<< ans =
<< -2 2 3 4
【讨论】:
【参考方案2】:假设您有数组 X 和 Y,并且您想找到五个最低的 Y 值:
[m mi] = sort(Y);
lowest5index = mi(1:5);
lowest5Y = Y(lowest5index);
lowest5X = X(lowest5index);
meanYlowest5 = mean(lowest5Y);
meanXlowest5 = mean(lowest5X);
解释:
带有两个输出参数的sort
命令返回排序后的数组(m
)和原始数组中的索引(mi
)。前五个索引mi(1:5)
对应于五个最低值。为 X 和 Y 取这些值中的mean
将做我们想要的。如果我不理解您的问题陈述,请澄清您的问题,我会再试一次。
【讨论】:
是的,对不起,我不够清楚。我需要找到 Y 中的 5 个最低值,然后对这 5 个点的 X 和 Y 进行平均!不过你的技术很有趣!如果它派上用场,我会记住这个技巧! 我的技术完全符合您的要求...我已经编辑了代码以使其更加清晰。如果还是不行,你需要更清楚地解释你的数据结构。 好的,这行得通。我认为通过对它们进行排序,您可以修改 X 值。我误解了。谢谢您的帮助! :D【参考方案3】:如何从最低值到最高值对数组进行sort
,然后选择前 5 个值。这些将是您的数组的 5 分钟值。然后对这 5 个值求平均值。
这可能不是最节省内存的方法,但只需 1000 个值就可以完成工作!
希望对你有帮助!
【讨论】:
以上是关于在数组中查找 n 个最小值的主要内容,如果未能解决你的问题,请参考以下文章
在 MATLAB/Octave 中查找 N 维数组中的所有局部最小值