在 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 小时的降水总量 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章