在 Perl 中总结 1 小时的降水总量 [关闭]

Posted

技术标签:

【中文标题】在 Perl 中总结 1 小时的降水总量 [关闭]【英文标题】:Sum 1-hour precipitation totals in Perl [closed] 【发布时间】:2022-01-14 09:47:13 【问题描述】:

我正在学习 Perl,需要帮助对数据求和,从数据结构中的第 3 步(前三个数字 0,2.2,0.5 然后接下来的三个数字 0.4,0.2,0.2,...等)(查看示例数据) )。

    'max' => [ 6,
              0.8,
               .
               .
               .
               .
               .
               .  ]

示例: 这是数据结构(哈希):

my $var1 = 
          "datetime" => [
                          1592049600,
                          1592053200,
                          1592056800,
                          1592060400,
                          1592064000,
                          1592067600,
                          1592071200,
                          1592074800,
                          1592078400,
                          1592082000,
                          1592085600,
                          1592089200,
                          1592092800,
                          1592096400,
                          1592100000,
                          1592103600,
                          1592107200,
                          1592110800,
                          1592114400,
                          1592118000,
                          1592121600,
                          1592125200,
                          1592128800,
                          1592132400,
                          1592136000
                        ],
            "max" => [
            0,
            2.2,
            0.5,
            0.4,
            0.2,
            0.2,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
         ]
;

'datetime' 是时间序列,'max' 是该时间段的最大降水量(在我的示例中为 1h 最大值总计)。

基本上,我想从 1 小时降水总量创建 3 小时降水总量。然后,我会这样做,但周期为 6 小时,以获得 6 小时的总降水量。

我希望我现在清楚

更新有效的完整代码:

my $maxes = $var1->max;

print "size of array: $#$maxes\n";



my @sums_2h;
for my $i (0..$#$maxes) 
   $sums_2h[$i/2] += $maxes->[$i];
   


my $max_2h = max(@sums_2h);

print "2h precipitation sum: @sums_2h\n";
print "2h precipitation max: $max_2h\n";


my @sums_3h;
for my $i (0..$#$maxes) 
   $sums_3h[$i/3] += $maxes->[$i];
   


my $max_3h = max(@sums_3h);

print "3h precipitation sum: @sums_3h\n";
print "3h precipitation max: $max_3h\n";


my @sums_6h;
for my $i (0..$#$maxes) 
   $sums_6h[$i/6] += $maxes->[$i];
   


my $max_6h = max(@sums_6h);

print "6h precipitation sum: @sums_6h\n";
print "6h precipitation max: $max_6h\n";


my @sums_12h;
for my $i (0..$#$maxes) 
   $sums_12h[$i/12] += $maxes->[$i];
   


my $max_12h = max(@sums_12h);

print "12h precipitation sum: @sums_12h\n";
print "12h precipitation max: $max_12h\n";


my @sums_24h;
for my $i (0..$#$maxes) 
   $sums_24h[$i/24] += $maxes->[$i];
   


my $max_24h = max(@sums_24h);

print "24h precipitation sum: @sums_24h\n";
print "24h precipitation max: $max_24h\n";

【问题讨论】:

my @array = (1,2,3,4);,顺便说一句。方括号构成一个数组引用,而不是一个列表。 嗯,这个问题没有什么不清楚的地方。 你尝试了什么?你能告诉我们你的代码吗? 是的,代码已添加。 @meteorolog 看不到您问题中的代码。只有输入数据在这里无济于事。请edit问题并添加您尝试过的所需代码/脚本。 【参考方案1】:
my @sums;
for my $i (0..$#array) 
   $sums[$i/3] += $array[$i];

如果元素的数量不能被 3 整除,则静默产生不完整的总和。


在你的情况下,那将是

my $maxes = $var1->max;

my @sums;
for my $i (0..$#$maxes) 
   $sums[$i/3] += $maxes->[$i];

【讨论】:

当使用这个例子时,它会产生这样的结果:14341379。如何创建array = (14,34,137,79)? 它确实产生了所需的数组。 @meteorolog 你的输入数组应该用圆括号括起来(..) @vkk05,没错,但这就是他们显然使用的。但他们使用了say @sums; 或类似的愚蠢的东西。

以上是关于在 Perl 中总结 1 小时的降水总量 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

降水量分级

预测未来八小时降水情况的神经网络天气模型

C Primer Plus_第10章_数组和指针_编程练习

熊猫 - 计算每小时平均滚动 10 分钟

Perl:如何知道 24 小时是不是已过?

寒假中期学习总结