【问题标题】:Reduce size of numeric array by averaging values in PHP: 20 values => X values通过在 PHP 中取平均值来减小数值数组的大小:20 个值 => X 值
【发布时间】:2009-07-29 22:34:51
【问题描述】:

在 PHP 中,我有一个包含 20 个或更多元素的数组。键已自动分配。这些值是从 1 到 50 的随机数。

<?php
$randomList = array();
for ($i = 0; $i < 20; $i++) {
  $randomList[] = mt_rand(1, 50);
}
?>

现在我想将此数组绘制成折线图。不幸的是,我只能为图表使用 5 个点。所以我必须减少数组中的元素数量。但我不想改变图表的外观。所以我需要一个这样的函数:

为了更清楚:当我想将数组的大小从 6 个元素减少到 3 个元素时,我可以将两个元素对相加并取平均值:

数组(1, 8, 3, 6, 9, 5) => 数组(4.5, 6, 7)

我的函数应该使用可变大小(用于输入和输出)来执行此操作。

我希望你能帮助我。提前致谢!

【问题讨论】:

  • 嗨。你能更具体地说明你想要制作的情节吗?某种线性回归?
  • 查看 Google 的这个例子:bit.ly/UFMX5 假设我有“150 个数据点”,我想让图表看起来像“40 个数据点”。但我不想只漏掉 73% 的数据点。
  • 您的示例不应该导致 array(4.5, 4.5, 7) 而不是 array(4.6, 6, 7) 吗?
  • 哦,当然可以。我以为 3+6 会是 12! :D 真的很尴尬。但在德国这里已经很晚了。 :)

标签: php arrays reduction


【解决方案1】:

要以您描述的方式将数组$randomList“缩短”为$X元素,您可以像这样一起使用array_chunk()array_map()

$randomList = array_chunk($randomList, count($randomList) / $X);
$randomList = array_map('array_average', $randomList);

并将array_average()定义为:

function array_average($array) {
    return array_sum($array) / count($array);
}

【讨论】:

    【解决方案2】:
    $randomList = array();
    for ($i = 0; $i < 20; $i++) {
      $randomList[] = mt_rand(1, 50);
    }  
    
    $avgList=array();
    for($i=0;$i<count($randomList)/2;$i++) {
       $avgList[] = ($randomList[$i*2] + $randomList[$i*2+1]) / 2
    }
    

    【讨论】:

    • 谢谢!但我不想将数组大小减半。该函数还应该能够将数组从 12 个元素减少到 4 个。或者 - 甚至更困难 - 17 个元素到 5 个。
    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2015-02-15
    • 2015-07-01
    • 2018-07-01
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多