【问题标题】:Finding the average of multiple arrays求多个数组的平均值
【发布时间】:2015-10-29 23:06:36
【问题描述】:

我有:

$array->[0]->[0..4] = (1,2,3,4,5)

$array->[1]->[0..6] = (12,13,14,15,16,17,18)

$array->[2]->[0..8] = (4,5,6,7,8,9,10,11,12)

我想找到每个数组的平均值,所以结果是:

$array->[0] = 3

$array->[1] = 15

$array->[2] = 8

这只是我的数据的示例,但我确实有 0 到 72-510 的数组,每个数组包含 0 到 1-40 个元素。我当前的脚本设置为变量 $i 遍历数组总数和变量 $j 遍历数组中元素数的位置。

以下是我的脚本的基本设置。

my $sum;
my $value;

foreach (my $i = 0; $i < "Number of Arrays"; ++$i) { 
 for (my $j = 0; $j < "Size of Array"; ++$j) { 
     $value = $array->[$i]->[$j];
 }
 $sum += $values;
 my $average = $sum / "Size of Array"; 
}

如果有人可以向我展示如何通过该示例完成此操作,那将非常有帮助!如果我同时发现任何东西,我会更新我的问题。

【问题讨论】:

    标签: arrays perl multidimensional-array


    【解决方案1】:

    使用 List::Util 并且没有 C 风格的 for 循环:

    use strict;
    use warnings;
    use List::Util qw(sum);
    use feature 'say';
    
    my $array = [
        [1, 2, 3, 4, 5],
        [12, 13, 14, 15, 16, 17, 18],
        [4, 5, 6, 7, 8, 9, 10, 11, 12],
        []
    ];
    
    foreach my $sub_array (@$array) {
        @$sub_array or next;                       # Is the array empty?
        my $avg = sum(@$sub_array) / @$sub_array;
        say "[@$sub_array] has average $avg";
    }
    

    【讨论】:

    • 问题中提到某些数组可能为空;你需要检查一下(虽然不清楚结果应该是 0 还是 undef 或其他东西)
    • 好点。我为空数组选择了undef(并且不打印它们)。
    • @$sub_array or next; 可能不那么冗长。
    【解决方案2】:

    你在球场上。

    您想为每个数组将$sum 重新初始化为0,并将每个 $value(不是$values)添加到$sum

    foreach (my $i = 0; $i < "Number of Arrays"; ++$i) { 
      my $sum = 0;
    
      for (my $j = 0; $j < "Size of Array"; ++$j) { 
        my $value = $array->[$i]->[$j];
        $sum += $value;
      }
    
      my $average = $sum / "Size of Array"; 
    }
    

    【讨论】:

      【解决方案3】:

      鉴于您有以下 php 数组(来自您的示例)

      $arrayOfAllArrays = array(
         'first_array' => array(1,2,3,4,5),
         'second_array' => array(12,13,14,15,16,17,18),
         'third_array' => array(4,5,6,7,8,9,10,11,12)
      );
      

      您可以使用以下脚本(我使用了长变量以便您更容易理解):

      $arrayOfAverages = array();
      foreach ($arrayOfAllArrays as $key => $array) {
          $sumOfArrayElements = array_sum($array);
          $numberOfElementsInArray = count($array);
          $arrayOfAverages[$key] = $sumOfArrayElements / $numberOfElementsInArray;
      }
      

      您将把平均值存储在数组 $arrayOfAverages 中。这是提到的数组的打印:

      Array
      (
          [first_array] => 3
          [second_array] => 15
          [third_array] => 8
      )
      

      【讨论】:

      • OP 更正了标签 - 这是一个 Perl 问题,而不是 PHP。
      【解决方案4】:
      Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) 
              [1] => Array ( [0] => 12 [1] => 13 [2] => 14 [3] => 15 [4] => 16 [5] => 17 [6] => 18 ) 
              [2] => Array ( [0] => 4 [1] => 5 [2] => 6 [3] => 7 [4] => 8 [5] => 9 [6] => 10 [7] => 11 [8] => 12 ) )
      

      输出:

      Array([0] => 3.5
            [1] => 15
            [2] => 8)
      

      代码如下:

          $sum = 0;
          $count = 0;
          foreach ($arrays as $key => $value) {
              foreach ($value as $k => $v) {
                  $sum += $v;
                  $count++;
              }
              $avg_array[$key] = $sum / $count;
              $sum = 0;
              $count = 0;
          }
          print_r($avg_array);
      

      希望这能解决你的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-06
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        相关资源
        最近更新 更多