【问题标题】:Find n minimum values in an array在数组中查找 n 个最小值
【发布时间】:2013-01-24 08:29:54
【问题描述】:

我正在使用 Matlab 2012a。

我有一个由 k 个单元组成的数组(比如 1000 个)。我需要找到这个数组的 5 个最低值,并且需要对 X 和 Y 中的这些值进行平均。

有人知道怎么做吗?

【问题讨论】:

  • 您对算法有疑问吗?你用的是什么编程语言?
  • 我编辑了,我的错。我正在使用 Matlab 2012a
  • 你的数据结构是什么?您提到“数组”和“单元格”以及“X”和“Y”。假设您有数组 X 和 Y,我创建了一个答案 - 但是重新阅读您的问题我实际上不确定您有什么...您能澄清一下吗?
  • 有比排序更有效的方法。谷歌类似"find highest k values"This 似乎很有用。

标签: matlab minimum minima


【解决方案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 个值就可以完成工作!

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 2013-04-18
      • 1970-01-01
      • 2018-05-03
      • 2021-10-27
      相关资源
      最近更新 更多