【问题标题】:Java: Reduce array to specific number of averagesJava:将数组减少到特定数量的平均值
【发布时间】:2016-05-25 10:45:37
【问题描述】:

需要解决的主要问题是:

假设我有一个包含 8 个数字的数组,例如[2,4,8,3,5,4,9,2] 我将它们用作坐标系中 x 轴的值来绘制一条线。但我只能显示其中的 3 个点。 我现在需要做的是将点 (8) 的数量减少到 3,而不要过多地操纵线 - 所以使用平均值应该是一种选择。 我不是在寻找整个数组的平均值 - 我仍然需要总共 8 个点中的 3 个点。

对于像 [2,4,2,4,2,4,2,4] 这样的数组和该数组中的 4 个数字,我可以简单地使用每对的平均“3” - 但如果数量不均。

但是我该怎么做呢?你知道这个过程在数学上是如何调用的吗?

给你一些关于这个问题的更现实的细节:我有一个 x 轴,它是 720 像素长,假设我得到 1000 分。现在我必须将这 1000 个点(2 个数组,一个用于 x 值,一个用于 y 值)减少到最多 720 个点。

想过插值之类的东西,但我仍然不太确定这是否是我正在寻找的东西。

【问题讨论】:

  • 搜索词:“代表性样本”。尽管 1000 人中有 720 人是不寻常的。随便挑?

标签: java arrays algorithm math interpolation


【解决方案1】:

插值是个好主意。您输入您的点并获得一个多项式函数作为输出。然后你可以用它来画你的线。在此处查看更多信息:Interpolation over an array (or two)

【讨论】:

  • 我不得不问这个愚蠢的问题:使用链接帖子(Apache Commons Math)中提到的库给了我一个多项式函数作为输出。现在我可以使用这个函数来计算我的线的点 - 但是我还有 1000 个点并且不知道如何为多项式函数选择 720 个点,对吧?我可能误解了所有这些数学知识......
  • 你有一个多项式函数 f 可以插值 1000 个点。现在你需要 720 个 x 来得到你的 y,只需使用这个:y = f(x)。您可以像线性间隔矢量或类似的东西一样生成 x。
  • 我得到了我的函数和我的 x 值的线性间隔向量。显然 x 值不允许大于函数的最大节点。但我的路线必须超越这一点。那么如何获得大于该值的 x 值的 y 值呢?感谢您的时间和耐心;)
  • 我不确定我是否明白你的意思。您最初有 1000 个点。最小的 x 和最大的 x 定义了您要画线的区域,对吗?你不能用你在这个区域的函数得到 720 y 点吗?
  • 很高兴我能帮上忙 :)
【解决方案2】:

我建议您以某种方式拟合所有点,然后在显示所需的特定点进行评估。

有很多适合的选择:

  1. 最小二乘
  2. 使用多项式或样条分段

您应该查阅文本或找到可以帮助您的库 - 例如Apache Commons Math

【讨论】:

    【解决方案3】:

    听起来您正在寻找比简单平均值更高级的数学函数。

    我建议尝试通过Mathematica Stack Exchange 识别潜在算法,然后尝试找到实现任何潜在选择的 Java 库(这里可能是一个新问题)。

    【讨论】:

    • 请确保您的回答试图回答 OP 的问题,而不是一般建议。评论更适合一般建议。
    【解决方案4】:

    既然是 X 轴,为什么不使用

    MIN, MAX and (MIN+MAX)/2 
    

    为了你的三分?

    【讨论】:

    • 我可能误解了这个问题,但如果你说的是 8 个点,那么插值将需要 (x,y) 而不仅仅是 x
    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    相关资源
    最近更新 更多